注意:在vm(data)的根数据,不能使用 Vm.set() /vm.$set()
一、监视
1、vue会监视data中所有层次的数据、
2、对象数据
a、对象中添加属性,vue默认不做响应
b、对象添加属性,vue做响应,通过如下api
Vue.set(target, 属性, 值) vue.$set(target, 属性, 值)
3、数组数据
a、使用api
push() //最后一个添加 pop() // 删除最后一个 unshift() // 添加第一个 shift() //删除第一个 sort() // 排序 reverse() // 反转 splice(索引, 数量, 新值) // 替换
b、使用vue.set()
Vue.set(target, 索引, 值) vue.$set(target, 索引, 值)
4、总结
对象响应:添加属性使用Vue.set()api,修改属性可以直接修改
数组响应:添加修改都要使用 api
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>数据响应式</title> <script type="text/javascript" src="../js/vue.js"></script> </head> <body> <div id="container"> <button @click="student.age++">年龄+1岁</button> <br> <button @click="addSex">添加性别属性,为男</button> <br> <button @click="changeSex">修改性别</button> <br> <button @click="addFriend">在列表首位添加一个朋友</button> <br> <button @click="changeName">修改第一个朋友的名字为:张三</button> <br> <button @click="addHobby">添加一个爱好</button> <br> <button @click="changeHobby">修改第一个爱好为:开车</button> <br> <button @click="filterSmoke">过滤爱好中的抽烟</button> <h2>姓名:{{student.name}}</h2> <h2>年龄:{{student.age}}</h2> <h2 v-show="student.sex">性别:{{student.sex}}</h2> <h2>爱好</h2> <ul> <li v-for="h in student.hobby"> {{h}} </li> </ul> <h2>朋友们</h2> <ul> <li v-for="f in student.friends"> {{f.name}}---{{f.age}} </li> </ul> </div> <script type="text/javascript"> const vm = new Vue({ el: "#container", data:{ student:{ name: 'jojo', age:40, hobby: ['吸烟', '喝酒', '烫头'], friends :[ {name: 'jack', age:30}, {name:'tom', age:35} ] } }, methods: { addSex(){ Vue.set(this.student, 'sex', '男') vue.$set(this.student, 'sex', '男') this.$set(this.student, 'sex', '男') }, changeSex(){ this.student.sex = '女' }, addFriend(){ this.student.friends.unshift({name: 'rose', age:20}) }, changeName(){ this.student.friends[0].name = '张三' }, addHobby(){ // this.student.hobby.push('学习') this.$set(this.student.hobby, this.student.hobby.length, '学习') }, changeHobby(){ this.student.hobby.splice(0,1,'开车') }, filterSmoke(){ this.student.hobby = this.student.hobby.filter((h) => { return h !== '吸烟' }) } }, }) </script> </body> </html>
标签:set,数组,vue,Vue,student,hobby,添加,name From: https://www.cnblogs.com/wt7018/p/18644246