js数据绑定操作,js数据绑定操作详解

时间:2019-10-06 20:34来源:编程技术
废话不多说,直接进入正题!!! 本文实例讲述了vue.js数据绑定操作。分享给大家供大家参考,具体如下: 数据绑定 数据绑定 响应式的数据绑定系统。建立绑定之后,DOM将和数据保持

废话不多说,直接进入正题!!!

本文实例讲述了vue.js数据绑定操作。分享给大家供大家参考,具体如下:

澳门金莎娱乐网站 1

数据绑定

数据绑定

响应式的数据绑定系统。建立绑定之后,DOM将和数据保持同步,无须手动维护DOM。使代码能够更加简洁易懂、提升效率。

响应式的数据绑定系统。建立绑定之后,DOM将和数据保持同步,无须手动维护DOM。使代码能够更加简洁易懂、提升效率。

数据绑定语法

数据绑定语法1.文本插值{{ }}Mustache标签

1.文本插值

Hello {{ name }}data:{ name: 'vue'}== > Hello vue

{{ }}Mustache标签

单次插值首次赋值后再更改vm实例属性值不会引起DOM的变化

Hello {{ name }}



data:{
    name: 'vue'
}
== > Hello vue
{{ name }}

单次插值

2.HTML属性Mustache标签{{ }}

首次赋值后再更改vm实例属性值不会引起DOM的变化

<div v-bind:></div>
{{ name }}

简写:

2.HTML属性

<div :></div>

Mustache标签{{ }}

3.绑定表达式放在Mustache标签内的文本内容。除了直接输出属性值之外,一段绑定表达式可以由一个简单的JavaScript表达式和可选的一个或多个过滤器构成(不支持正则表达式,若需要复杂的转换,则使用过滤器或者计算属性来进行处理)。

<div v-bind:id="'id-'+id"></div>
{{ index + 1}}{{ index == 0 ? 'a' : 'b' }}{{name.split.join }}{{ var a = 1 }} //无效

简写:

4.过滤器vue.js允许在表达式后添加可选的过滤器,以管道符"|"指示。

<div :id="'id-'+id"></div>
{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中,返回字符串的大写值。{{ name | filterA | filterB }} //多个过滤器链式使用{{ name | filterA arg1 arg2 }} //传入多个参数

3.绑定表达式

filterA将name的值做为第一个参数,arg1,arg2做为第二、第三个参数传入过滤器函数中。最终函数的返回值即为输出结果。arg1,arg2可以使用表达式,也可以加上单引号,直接传入字符串。例如:

放在Mustache标签内的文本内容。除了直接输出属性值之外,一段绑定表达式可以由一个简单的JavaScript表达式和可选的一个或多个过滤器构成(不支持正则表达式,若需要复杂的转换,则使用过滤器或者计算属性来进行处理)。

{{ name.split | limitBy 3 1 }} // ->u,e
{{ index + 1}}
{{ index == 0 ? 'a' : 'b' }}
{{name.split('').join('|') }}
{{ var a = 1 }} //无效

过滤器limitBy可以接受两个参数,第一个参数是设置显示个数,第二个参数为可选,指从开始元素的数组下标。vue.js内置的10个过滤器(Vue.js2.0中去除)capitalize:字符串首字符转化为大写。uppercase:字符串转化为大写。lowercase:字符串转化为小写。currency:参数为{String}[货币符号],{Number}[小数位],将数字转化成货币符号,并且会自动添加数字分节号。

4.过滤器

{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00

vue.js允许在表达式后添加可选的过滤器,以管道符"|"指示。

pluralize:参数为{String}single,[double,triple],字符串复数化。

{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。
{{ name | filterA | filterB }}  //多个过滤器链式使用
{{ name | filterA arg1 arg2 }} //传入多个参数
<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>

此时,filterA将name的值做为第一个参数,arg1,arg2做为第二、第三个参数传入过滤器函数中。

输出结果:

最终函数的返回值即为输出结果。arg1,arg2可以使用表达式,也可以加上单引号,直接传入字符串。

1item 1st2items 2nd3items 3rd4items 4th

例如:

json:参数为{Number}[indent]空格缩进数,将json对象数据输出成符合json格式的字符串。debounce:传入值必须是函数,参数可选,为{Number}[wait],即延时时长。作用是当调用函数n毫秒后,才会执行该动作。

{{ name.split('') | limitBy 3 1 }} // ->u,e
<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发

过滤器limitBy可以接受两个参数,第一个参数是设置显示个数,第二个参数为可选,指从开始元素的数组下标。

limitBy:传入值必须是数组,参数为{Number}limit,{Number}[offset],limit为显示个数,offset为开始显示数组下标。

vue.js内置的10个过滤器(Vue.js2.0中去除)

<div v-for="item in items | limitBy 10"></div> //items为数组,且只显示数组中的前十个元素

capitalize:字符串首字符转化为大写。
uppercase:字符串转化为大写。
lowercase:字符串转化为小写。
澳门金莎娱乐网站,currency:参数为{String}[货币符号],{Number}[小数位],将数字转化成货币符号,并且会自动添加数字分节号。

filterBy:传入值必须是数组,参数为{String | Function}targetStringOrFunction,即需要匹配的字符串或函数;"in"可选分隔符。{String}[...searchKeys],为检索的属性区域。

{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00
<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],在多个属性中进行检索。

pluralize:参数为{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 4th
vue1.0{"name":"vue1.0","version":"1.0"}

json:参数为{Number}[indent]空格缩进数,将json对象数据输出成符合json格式的字符串。

使用自定义的过滤函数,函数可以在选项methods中定义

debounce:传入值必须是函数,参数可选,为{Number}[wait],即延时时长。作用是当调用函数n毫秒后,才会执行该动作。

<p v-for="item in items | filterBy customFilter" methods:{ cuestomFilter:function{ if(item.name) return true; //检索所有元素中包含name属性的元素 }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 }
<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发

orderBy:传入值必须是数组,参数为{String|Array|Function}sortKeys,即指定排序的策略。单个键名:

limitBy:传入值必须是数组,参数为{Number}limit{Number}[offset],limit为显示个数,offset为开始显示数组下标。

<p v-for="item in items | orderBy 'name' -1">{{ item.name}}</p> //items数组中以键名name进行降序排列
<div v-for="item in items | limitBy 10"></div> //items为数组,且只显示数组中的前十个元素

多个键名:

filterBy:传入值必须是数组,参数为{String | Function}targetStringOrFunction,即需要匹配的字符串或函数;"in"可选分隔符。{String}[...searchKeys],为检索的属性区域。

<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序
<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 | orderBy customOrder">{{item.name}}</p>methods:{ customOrder: function{ return parseFloat(a.version) > parseFloat(b.version) //对比item中version的值的大小进行排序 }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860}
<p v-for="item in items | filterBy customFilter"
  methods:{
    cuestomFilter:function(item){
      if(item.name) return true;  //检索所有元素中包含name属性的元素
    }
  }

5.指令指令的值限定为绑定表达式,即当表达式的值发生改变时,会有些特殊行为作用到绑定的DOM上。参数:src为参数

orderBy:传入值必须是数组,参数为{String|Array|Function}sortKeys,即指定排序的策略。

<img v-bind:src="avatar" /> <==> <img src="{{avatar}}" />

单个键名:

修饰符:以半角句号.开始的特殊后缀,用于表示指令应该以特殊方式绑定。计算属性避免在模板中加入过重的业务逻辑,保证模版的结构清晰和可维护性。1.基础例子

<p v-for="item in items | orderBy 'name' -1">{{ item.name}}</p> //items数组中以键名name进行降序排列
var vm = new Vue({ el: '#app', data: { firstName:'Gavin', lastName:'CLY' },/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 computed: { fullName:function(){ //this指向vm实例 return this.firstName + ' ' + this.lastName; }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 }})<p>{{ firstName }}</p> //Gavin<p>{{ lastName }}</p> //CLY<p>{{ fullName }}</p> //Gavin CLY

多个键名:

注:此时对vm.firstName和vm.lastName进行修改,始终会影响vm.fullName。2.Setter更新属性时带来便利

<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序
 var vm = new Vue({ el:'#el', data:{ cents:100 }, computed:{ price:{ set:function { this.cents = newValue * 100; }, get:function(){ return (this.cents / 100).toFixed; }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860 } }})

自定义排序函数:

表单控件v-model:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。

<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的值的大小进行排序
  }
}
var vm = new Vue({ el:'#app', data: { message: '', gender: '', cheched: '', multiChecked: '', a: 'checked', b: 'checked' }/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860})

5.指令

1. Text输入框示例,用户输入的内容和vm.message直接绑定:

指令的值限定为绑定表达式,即当表达式的值发生改变时,会有些特殊行为作用到绑定的DOM上。

<input type="text" v-model="message" />Your input is : {{ message }} 

参数:src为参数

2. Radio单选框示例:

<img v-bind:src="avatar" /> <==>  <img src="{{avatar}}" />
<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的值。

<button v-on:click.stop="doClick"></button> //stop:停止冒泡。相当于调用了e.stopPropagagation().
<input type="checkbox" v-model="checked" />checked: {{ checked }}  //显示的是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|2

1.基础例子

4.Select单选

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
<select v-model="selected"> <option selected>A</option> <option>B</option> <option>C</option></select>/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860Selected: {{ selected }}

注:此时对vm.firstNamevm.lastName进行修改,始终会影响vm.fullName

多选

2.Setter

<select v-model="multiSelected" multiple> <option selected>A</option> <option>B</option> <option>C</option></select>/欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860MultiSelected: {{ multiSelected.join }}

更新属性时带来便利

5.绑定value通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。Checkbox

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);
        }
      }
    }
})
<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="

表单控件

选中:

v-model:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。

vm.checked == vm.a //=> true
var vm = new Vue({
    el:'#app',
    data: {
      message: '',
      gender: '',
      cheched: '',
      multiChecked: '',
      a: 'checked',
      b: 'checked'
    }
})

未选中:

1. Text

vm.checked == vm.b //=>true

输入框示例,用户输入的内容和vm.message直接绑定:

Radio

<input type="text" v-model="message" />
Your input is : {{ message }} 
<input type="radio" v-model="checked" v-bind:value="a" >

2. Radio

选中:

单选框示例:

vm.checked == vm.a //=> true
<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.Select Options

3.Checkbox

<select v-model="selected"> <!-- 对象字面量 --> <option v-bind:value="{ number:123}">123</option></select>//欢迎加入全栈开发交流圈一起吹水聊天学习交流:864305860

单个勾选框,v-model即为布尔值,此时Input的value并不影响v-model的值。

选中:

<input type="checkbox" v-model="checked" />
checked: {{ checked }}  //显示的是true/false
typeof vm.selected //=> objectvm.selected.number //=> 123

多个勾选框,v-model使用相同的属性名称,且属性为数组。

6.参数特性.lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。

<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|2
<!-- 在 "change" 而不是 "input" 事件中更新 --><input v-model.lazy="msg" >

4.Select

.number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。

单选

<input v-model.number="age" type="number">
<select v-model="selected">
  <option selected>A</option>
  <option>B</option>
  <option>C</option>
</select>
Selected: {{ selected }}

.trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入

多选

<input v-model.trim="msg">
<select v-model="multiSelected" multiple>
  <option selected>A</option>
  <option>B</option>
  <option>C</option>
</select>
MultiSelected: {{ multiSelected.join('|') }}

Class与Style绑定1.Class绑定对象语法:v-bind:class接受参数是一个对象,而且可以与普通的class属性共存。

5.绑定value

<div v-bind:></div>

通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。

vm实例中需要包含:

Checkbox

data:{ active:true}//欢迎加入全栈开发交流圈一起学习交流:864305860
<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="b" />

渲染结果为:

选中:

<div ></div>
vm.checked == vm.a  //=> true

数组语法:v-bind:class也接受数组作为参数。

未选中:

<div v-bind:></div>
vm.checked == vm.b //=>true

vm实例中需要包括:

Radio

data:{ classA:"class-a", classB:"class-b"}//欢迎加入全栈开发交流圈一起学习交流:864305860
<input type="radio" v-model="checked" v-bind:value="a" >

渲染结果为:

选中:

<div ></div>
vm.checked == vm.a //=> true

使用三元表达式切换数组中的class

3.Select Options

<div v-bind:"]"></div>
<select v-model="selected">
    <!-- 对象字面量 -->
    <option v-bind:value="{ number:123}">123</option>
</select>

选中:

vm.isB = false
typeof vm.selected //=> object
vm.selected.number //=> 123

则渲染结果为

6.参数特性

<div ></div>

.lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。

2.内联样式绑定(style属性绑定)对象语法:直接绑定符合样式格式的对象。

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >
<div v-bind:style="alertStyle"></div>

.number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。

vm实例中包含:

<input v-model.number="age" type="number">
data:{ alertStyle:{ color: 'red', fontSize: '2px' }//欢迎加入全栈开发交流圈一起学习交流:864305860}<div v-bind:style="{fontSize:alertStyle.fontSize,color:'red'}"></div>

.trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入

数组语法:v-bind:style允许将多个样式对象绑定到同一元素上。

<input v-model.trim="msg">
<div v-bind:style="[ styleObjectA,styleObjectB]" .></div>

Class与Style绑定

3.自动添加前缀在使用transform这类属性时,v-bind:style会根据需要自动添加厂商前缀。:style在运行时进行前缀探测,如果浏览器版本本省就不支持不加前缀的css属性,那就不会添加。结语

1.Class绑定

感谢您的观看,如有不足之处,欢迎批评指正。

对象语法:v-bind:class接受参数是一个对象,而且可以与普通的class属性共存。

本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

<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?classB:""]"></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程序设计有所帮助。

您可能感兴趣的文章:

  • vue.js数据绑定的方法(单向、双向和一次性绑定)
  • Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
  • Vue.js数据绑定之data属性
  • vue.js动态数据绑定学习笔记
  • Vue.js中数据绑定的语法教程
  • Vue.js+Layer表格数据绑定与实现更新的实例
  • Vue.js每天必学之数据双向绑定
  • 详解Vue.js基于$.ajax获取数据并与组件的data绑定
  • Vue.js第一天学习笔记(数据的双向绑定、常用指令)
  • vue.js利用defineProperty实现数据的双向绑定
  • 详解Vue.js之视图和数据的双向绑定(v-model)

编辑:编程技术 本文来源:js数据绑定操作,js数据绑定操作详解

关键词: