Vue提供了watch来监听双向绑定过程当中data的变化
可是平时的开发过程当中你可能会遇到watch并无被触发
下面对数组、对象和字符串作了简单的测试总结javascript
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="vue.js" charset="utf-8"></script> <title>Document</title> </head> <body> <div id="app"> <button type="button" @click="reset">重置</button> <div> <h3>watch状态改变</h3> <p>arrchange:{{watch.arr}}</p> <p>objchange:{{watch.obj}}</p> <p>objnamechange:{{watch.objname}}</p> <p>stringchange:{{watch.string}}</p> <p>numchange:{{watch.num}}</p> </div> <div> <h3>数据展现</h3> <p>arr:{{arr}}</p> <p>obj:{{obj}}</p> <p>string:{{string}}</p> <p>num:{{num}}</p> </div> <div> <h3>arr操做</h3> <button type="button" @click="changeArr(0)">改变arr[0]的name</button> <button type="button" @click="changeArr(1)">改变arr[0]的name($set)</button> <button type="button" @click="changeArr(2)">删除arr[0]</button> <button type="button" @click="changeArr(3)">删除arr[0].name</button> <button type="button" @click="changeArr(4)">删除arr[0].name($delete)</button> <button type="button" @click="changeArr(5)">unshift一个对象到arr</button> <button type="button" @click="changeArr(6)">arr[0]从新赋值</button> <button type="button" @click="changeArr(7)">arr[0]从新赋值($set)</button> <button type="button" @click="changeArr(8)">arr从新赋值</button> <button type="button" @click="changeArr(9)">arr从新赋值($set)</button> </div> <div> <h3>object操做</h3> <button type="button" @click="changeObj(0)">修改obj的name字段</button> <button type="button" @click="changeObj(1)">修改obj的name字段($set)</button> <button type="button" @click="changeObj(2)">添加age属性</button> <button type="button" @click="changeObj(3)">添加age属性($set)</button> <button type="button" @click="changeObj(4)">删除obj的name字段</button> <button type="button" @click="changeObj(5)">删除obj的name字段($delete)</button> <button type="button" @click="changeObj(6)">对obj从新赋值</button> </div> <div> <h3>String操做</h3> <button type="button" @click="changeStr">修改str字段</button> </div> <div> <h3>Num操做</h3> <button type="button" @click="changeNum">修改num字段</button> </div> </div> </body> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { watch: { arr: 0, obj: 0, string: 0, num: 0, objname: 0 }, arr: [{ name: '笨笨', address: '上海' }, { name: '笨笨熊', address: '北京' }], obj: { name: '呆呆', address: '苏州' }, string: "JavaScript", num: 0 }, watch: { arr: function() { this.watch.arr++ }, 'obj.name': function() { this.watch.objname++ }, obj: function() { this.watch.obj++ }, string: function() { this.watch.string++ }, num: function() { this.watch.num++ } }, methods: { reset: function() { this.watch = { arr: 0, obj: 0, string: 0, num: 0 }; this.arr = [{ name: '笨笨', address: '上海' }, { name: '笨笨熊', address: '北京' }]; this.obj = { name: '呆呆', address: '苏州' }; this.string = "JavaScript"; this.num = 0; }, changeArr: function(type) { switch (type) { case 0: this.arr[0].name = "俄罗斯" break; case 1: this.$set(this.arr[0], 'name', '俄罗斯2') break; case 2: this.arr.splice(0, 1) break; case 3: delete this.arr[0].name console.log(this.arr) break; case 4: this.$delete(this.arr[0], 'name') console.log(this.arr) break; case 5: this.arr.unshift({ name: '呆呆', address: '苏州' }) break; case 6: this.arr[0] = { name: '美丽', address: '意大利' } console.log(this.arr) break; case 7: this.$set(this.arr, 0, { name: '美丽', address: '意大利' }) break; case 8: this.arr = [{ name: '泡泡', address: 'llll' }] break; case 9: this.$set(this, 'arr', [{ name: '美丽', address: '意大利' }]) break; default: } }, changeObj: function(type) { switch (type) { case 0: this.obj.name = "帅呆呆" break; case 1: this.$set(this.obj, 'name', '帅帅帅呆呆') break; case 2: this.obj.age = 20 break; case 3: this.$set(this.obj, 'age', 22) break; case 4: delete this.obj.name break; case 5: this.$delete(this.obj, 'name') break; case 6: this.$set(this, 'obj', { name: '小贝', address: '哈哈哈' }) break; default: } }, changeStr: function() { this.string += '6' }, changeNum: function() { this.num++ } } }) </script> </html>
测试结果html
会触发watch的vue
Arrayjava
Objectgit
String、Number 能够触发watchgithub
因此须要触发watch时尽量从新赋值vuex
代码地址
https://github.com/zuank/notes
测试地址
https://zuank.github.io/notes...数组
添加了vuex的测试实现
https://github.com/zuank/notes
测试地址
http://yuehao.duapp.com/watch...app