Vue.js中computed、methods、watch的使用
2018-01-17 15:36
1006 查看
1、computed计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例,在HTML DOM加载后马上执行的,如赋值,它是依赖缓存的,当相关依赖发生变化时才会重新取值。
2、methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例,必须要有一定的触发条件才能执行,如点击事件。
3、watch是一种更通用的方式来观察和响应 Vue 实例上的数据变动。一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性,用于观察Vue实例上的数据变动。对应一个对象,键是观察表达式,值是对应回调。值也可以是方法名,或者是对象,包含选项。
所以他们的执行顺序为:默认加载的时候先computed再watch,不执行methods;等触发某一事件后,则是:先methods再watch。
具体代码测试如下:
点击click按钮触发methods中的someMethod事件,改变输入框A中的值触发watch中的监听事件,页面加载时触发computed中的事件。
2、methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例,必须要有一定的触发条件才能执行,如点击事件。
3、watch是一种更通用的方式来观察和响应 Vue 实例上的数据变动。一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性,用于观察Vue实例上的数据变动。对应一个对象,键是观察表达式,值是对应回调。值也可以是方法名,或者是对象,包含选项。
所以他们的执行顺序为:默认加载的时候先computed再watch,不执行methods;等触发某一事件后,则是:先methods再watch。
具体代码测试如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>watch测试</title> <script src="js/vue.js"></script> <style> /*移除HTML5 input在type="number"时的上下小箭头*/ input::-webkit-outer-spin-button, input::-webkit-inner-spin-button{ -webkit-appearance: none; margin: 0; } input[type="number"]{-moz-appearance:textfield;} </style> </head> <body> <div class="wrap"> <input type="number" /> <div id="app"> {{x}}--{{y}}--{{z}}--{{D}} <p> <button @click="someMethod">Click</button> </p> <p> D:<input :value="DF" type="" name="" id="" value="" /> </p> <p> A:<input v-model="x" type="" name="" id="" value="" /> </p> </div> </div> <script> var vm=new Vue({ el:'#app', data:{ x:1, y:2, z:3, D:99 }, watch:{ //x值发生变化时会触发 x:function(val,oldValue){ console.log('[watch]==>new:%s,old:%s',val,oldValue); }, y:'someMethod', //深度watcher z:{ handler:function(val,oldVal){ console.log('deep:'+val+':::'+oldVal) }, deep:true }, }, methods:{ //被调用时触发 someMethod:function(){ this.z=this.z+999; this.D=this.D+10; console.log('fn:'+this.z+'==='+this.D) } }, //界面加载时触发 computed:{ DF:function(){ return this.D; }, doubleDF:function(){ return this.DF*2 }, doDF:{ get:function(){ return this.D+11; }, set:function(v){ this.D=this.D-11; this.x=v-222; } } } }) vm.x=88; vm.z=999; vm.doDF console.log(vm.doDF)//99+11=110 vm.doDF=111; console.log(vm.doDF)//D:110-11=99(在上一步的基础上) x:111-222=-111 console.log(vm.D)//88 在上一步vm.doDF=111;设置的时候this.D=this.D-11;对D进行了重新赋值 vm.doDF console.log(vm.doDF)//99 </script> </body> </html>
点击click按钮触发methods中的someMethod事件,改变输入框A中的值触发watch中的监听事件,页面加载时触发computed中的事件。
相关文章推荐
- vue.js重学之旅(2)——vue.js里的数据操作(data,methods,computed,watch)
- vue.js中的computed和methods和watch之间的区别
- vue.js——computed属性与methods属性的区别
- 深入浅析Vue.js中 computed和methods不同机制
- vue学习05--Vuejs中computed、methods、watch的区别[2]
- vue.js 计算属性及计算属性(computed)、methods、watched三者区别
- vue 计算属性computed和观察watch 和方法methods
- Vue的watch和computed方法的使用及区别介绍
- Vue.js计算属性computed与watch(5)
- vue.js使用watch监听路由变化的方法
- Vue中computed,methods,watch用法上的异同
- Vue.js的computed和watch用法及区别
- 实例分析Vue.js中 computed和methods不同机制
- vue学习04--[转发]Vuejs中computed、methods、watch的区别
- Vue中computed(计算属性)、methods、watch的区别
- Vue中watch和computed的使用演示
- Vue.js computed vs Methods区别
- Vue.js computed vs Methods
- 浅析angular,react,vue.js jQuery使用区别
- vuejs使用指南(一)