本文实例讲述了vue.js数据绑定操作。分享给大家供大家参考,具体如下:
数据绑定
响应式的数据绑定系统。建立绑定之后,DOM将和数据保持同步,无须手动维护DOM。使代码能够更加简洁易懂、提升效率。
数据绑定语法
1.文本插值
{{ }}Mustache标签
<span>Hello {{ name }}</span>
data:{ name: 'vue' } == > Hello vue
单次插值
首次赋值后再更改vm实例属性值不会引起DOM的变化
<span v-once="name">{{ name }}</span>
2.HTML属性
Mustache标签{{ }}
<div v-bind:id="'id-'+id"></div>
简写:
<div :id="'id-'+id"></div>
3.绑定表达式
放在Mustache标签内的文本内容。除了直接输出属性值之外,一段绑定表达式可以由一个简单的JavaScript表达式和可选的一个或多个过滤器构成(不支持正则表达式,若需要复杂的转换,则使用过滤器或者计算属性来进行处理)。
{{ index + 1}} {{ index == 0 "|"指示。{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。 {{ name | filterA | filterB }} //多个过滤器链式使用 {{ name | filterA arg1 arg2 }} //传入多个参数此时,filterA将name的值做为第一个参数,arg1,arg2做为第二、第三个参数传入过滤器函数中。
最终函数的返回值即为输出结果。arg1,arg2可以使用表达式,也可以加上单引号,直接传入字符串。
例如:
{{ name.split('') | limitBy 3 1 }} // ->u,e过滤器limitBy可以接受两个参数,第一个参数是设置显示个数,第二个参数为可选,指从开始元素的数组下标。
vue.js内置的10个过滤器(Vue.js2.0中去除)
capitalize:字符串首字符转化为大写。
uppercase:字符串转化为大写。
lowercase:字符串转化为小写。
currency:参数为{String}[货币符号],{Number}[小数位],将数字转化成货币符号,并且会自动添加数字分节号。{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00pluralize:参数为{String}single,[double,triple],字符串复数化。
<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>//输出结果: 1item 1st 2items 2nd 3items 3rd 4items 4thjson:参数为{Number}[indent]空格缩进数,将json对象数据输出成符合json格式的字符串。
debounce:传入值必须是函数,参数可选,为{Number}[wait],即延时时长。作用是当调用函数n毫秒后,才会执行该动作。
<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发limitBy:传入值必须是数组,参数为
{Number}limit
,{Number}[offset]
,limit为显示个数,offset为开始显示数组下标。<div v-for="item in items | limitBy 10"></div> //items为数组,且只显示数组中的前十个元素filterBy:传入值必须是数组,参数为
{String | Function}targetStringOrFunction
,即需要匹配的字符串或函数;"in"可选分隔符。{String}[...searchKeys]
,为检索的属性区域。<p v-for="name in names | filterBy '1.0'">{{ name }}</p> //检索names数组中值包含1.0的元素 <p v-for="item in items | filterBy '1.0' in 'name'">{{ item | json }}</p> //检索items中元素属性name值为1.0的元素输出。检索区域也可以为数组,即in [name,version],在多个属性中进行检索。//输出结果 vue1.0 {"name":"vue1.0","version":"1.0"}使用自定义的过滤函数,函数可以在选项methods中定义
<p v-for="item in items | filterBy customFilter" methods:{ cuestomFilter:function(item){ if(item.name) return true; //检索所有元素中包含name属性的元素 } }orderBy:传入值必须是数组,参数为
{String|Array|Function}sortKeys
,即指定排序的策略。单个键名:
<p v-for="item in items | orderBy 'name' -1">{{ item.name}}</p> //items数组中以键名name进行降序排列多个键名:
<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序自定义排序函数:
<p v-for="item in items | orderBy customOrder">{{item.name}}</p> methods:{ customOrder: function(a,b){ return parseFloat(a.version) > parseFloat(b.version) //对比item中version的值的大小进行排序 } }5.指令
指令的值限定为绑定表达式,即当表达式的值发生改变时,会有些特殊行为作用到绑定的DOM上。
参数:src为参数
<img v-bind:src="/UploadFiles/2021-04-02/avatar">修饰符:以半角句号.开始的特殊后缀,用于表示指令应该以特殊方式绑定。
<button v-on:click.stop="doClick"></button> //stop:停止冒泡。相当于调用了e.stopPropagagation().计算属性
避免在模板中加入过重的业务逻辑,保证模版的结构清晰和可维护性。
1.基础例子
var vm = new Vue({ el: '#app', data: { firstName:'Gavin', lastName:'CLY' }, computed: { fullName:function(){ //this指向vm实例 return this.firstName + ' ' + this.lastName; } } })<p>{{ firstName }}</p> //Gavin <p>{{ lastName }}</p> //CLY <p>{{ fullName }}</p> //Gavin CLY注:此时对
vm.firstName
和vm.lastName
进行修改,始终会影响vm.fullName
。2.Setter
更新属性时带来便利
var vm = new Vue({ el:'#el', data:{ cents:100 }, computed:{ price:{ set:function(newValue) { this.cents = newValue * 100; }, get:function(){ return (this.cents / 100).toFixed(2); } } } })表单控件
v-model:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。
var vm = new Vue({ el:'#app', data: { message: '', gender: '', cheched: '', multiChecked: '', a: 'checked', b: 'checked' } })1. Text
输入框示例,用户输入的内容和vm.message直接绑定:
<input type="text" v-model="message" /> <span>Your input is : {{ message }} </span>2. Radio
单选框示例:
<label><input type="radio" value="male" v-model="gender">男</lable> <label><input type="radio" value="famale" v-model="gender">女</lable> <p>{{ gender }}</p> //显示的是value值3.Checkbox
单个勾选框,v-model即为布尔值,此时Input的value并不影响v-model的值。
<input type="checkbox" v-model="checked" /> <span>checked: {{ checked }} </span> //显示的是true/false多个勾选框,v-model使用相同的属性名称,且属性为数组。
<label><input type="checkbox" value="1" v-model="multiChecked">1</label> <label><input type="checkbox" value="1" v-model="multiChecked">2</label> <label><input type="checkbox" value="1" v-model="multiChecked">3</label> <p>MultiChecked:{{ multiChecked.join{'|'} }}</p> //multiChecked:1|24.Select
单选
<select v-model="selected"> <option selected>A</option> <option>B</option> <option>C</option> </select> <span>Selected: {{ selected }}</span>多选
<select v-model="multiSelected" multiple> <option selected>A</option> <option>B</option> <option>C</option> </select> <span>MultiSelected: {{ multiSelected.join('|') }}</span>5.绑定value
通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。
Checkbox
<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="b" />选中:
vm.checked == vm.a //=> true未选中:
vm.checked == vm.b //=>trueRadio
<input type="radio" v-model="checked" v-bind:value="a" >选中:
vm.checked == vm.a //=> true3.Select Options
<select v-model="selected"> <!-- 对象字面量 --> <option v-bind:value="{ number:123}">123</option> </select>选中:
typeof vm.selected //=> object vm.selected.number //=> 1236.参数特性
.lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。
<!-- 在 "change" 而不是 "input" 事件中更新 --> <input v-model.lazy="msg" >.number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。
<input v-model.number="age" type="number">.trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入
<input v-model.trim="msg">Class与Style绑定
1.Class绑定
对象语法:
v-bind:class
接受参数是一个对象,而且可以与普通的class属性共存。<div class="tab" v-bind:class="{'active':active,'unactive':!active}"></div>vm实例中需要包含:
data:{ active:true }渲染结果为:
<div class="tab active"></div>数组语法:
v-bind:class
也接受数组作为参数。<div v-bind:class="[classA,classB]"></div>vm实例中需要包括:
data:{ classA:"class-a", classB:"class-b" }渲染结果为:
<div class="class-a class-b"></div>使用三元表达式切换数组中的class
<div v-bind:class="[classA,isB""]"></div>若
vm.isB = false则渲染结果为
<div class="class-a"></div>2.内联样式绑定(style属性绑定)
对象语法:直接绑定符合样式格式的对象。
<div v-bind:style="alertStyle"></div>vm实例中包含:
data:{ alertStyle:{ color: 'red', fontSize: '2px' } }<div v-bind:style="{fontSize:alertStyle.fontSize,color:'red'}"></div>数组语法:
v-bind:style
允许将多个样式对象绑定到同一元素上。<div v-bind:style="[ styleObjectA,styleObjectB]" .></div>3.自动添加前缀
在使用transform这类属性时,
v-bind:style
会根据需要自动添加厂商前缀。:style
在运行时进行前缀探测,如果浏览器版本本省就不支持不加前缀的css属性,那就不会添加。希望本文所述对大家vue.js程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]