vue-vue实例方法(数据)
一、简介
vue实例方法(数据)包括3个:vm.$set()、vm.$watch()、vm.$delete()。
分类 | vue实例方法名称 | 方法用户 | 备注说明 |
数据 | vm.$set(object,key,value) | 为对象object添加属性key,并指定属性值value | |
vm.$delete(object,key) | 删除对象的属性key | ||
vm.$watch(data,callback[,options]) | 观察 Vue 实例上的一个表达式或者一个函数计算结果的变化。 |
二、vue实例方法(数据)
1、vm.$set(object,key,value) 为对象object添加属性key,并指定属性值value
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue实例方法(数据)</title> <!--引入vue--> <script src="../js/vue.js"></script> </head> <body> <div id="hello"> <h1>{{user.name}}</h1> <h2>{{user.age}}</h2> <button @click='doUpdate'>修改属性值</button> <button @click='doAdd'>添加属性</button> </div> <script> let vm = new Vue({ el:'#hello', data:{ user:{ id:1001, name:'monica' } }, methods:{ doUpdate(){ this.user.name='Pheen'; }, //vue实例方法(数据) //vm.$set(object,key,value) 为对象object添加属性名key设置属性值value(见方式2) doAdd(){ //方式1 通过普通方式为对象添加属性,vue无法实时监视到。 //this.user.age=20; //方式2 通过vue实例的vm.$set方法为对象添加属性,vue可以实时监视。(推荐) //this.$set(this.user,'age',20); //方式3 通过全局API方法Vue.set方法为对象添加属性,vue可以实时监视。(推荐) //Vue.set(this.user,'age',20); console.log(this.user); //一般会先判断对象中是否有age属性,如果有age属性,则age加1岁,如果没有age属性,则添加age属性,并把age的值设为1 if(this.user.age){ this.user.age++; }else{ vm.$set(this.user,'age',1) } }, } }); </script> </body> </html>
2、vm.$delete(object,key) 删除对象object的属性key
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>vue实例方法(数据)</title> 6 <!--引入vue--> 7 <script src="../js/vue.js"></script> 8 </head> 9 10 <body> 11 <div id="hello"> 12 <h1>{{user.name}}</h1> 13 <h2>{{user.age}}</h2> 14 <button @click='doDelete'>删除属性</button> 15 </div> 16 <script> 17 let vm = new Vue({ 18 el:'#hello', 19 data:{ 20 user:{ 21 id:1001, 22 name:'monica' 23 } 24 }, 25 //vue实例方法(数据) 26 //vm.$delete(object,key) 删除对象object的属性key 27 doDelete(){ 28 //先判断要删除的属性是否存在,如果存在就删除,如果不存在提示 29 30 //删除对象的属性 31 if(this.user.age){ 32 //写法1 使用vm.$delete删除对象的属性 33 //vm.$delete(this.user,'age') 34 //写法2 使用Vue.delete()全局API方法删除对象的属性 35 Vue.delete(this.user,'age') 36 }else{ 37 alert('属性不存在') 38 } 39 }, 40 } 41 }); 42 43 </script> 44 </body> 45 </html>
3、vm.$watch(data,callback,[options]) 观察 Vue 实例上的一个表达式或者一个函数计算结果的变化。
a.监视变量name和age的结果变化
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>vue实例方法(数据)</title> 6 <!--引入vue--> 7 <script src="../js/vue.js"></script> 8 </head> 9 10 <body> 11 <div id="hello"> 12 <h1>{{name}}</h1> 13 <input type="text" v-model='name'> 14 <h1>{{age}}</h1> 15 <input type="text" v-model='age'> 16 <h1>{{user.name}}</h1> 17 <input type="text" v-model='user.name'> 18 </div> 19 <script> 20 let vm = new Vue({ 21 el:'#hello', 22 data:{ 23 name:'monica', 24 age:20, 25 user:{ 26 name:'alice' 27 } 28 }, 29 30 31 //方式2 使用vm提供的watch选项 32 watch:{ 33 age:function(newVal,oldVal){ 34 console.log('我监视到age被修改了','age原值:'+oldVal,'age新值:'+newVal) //age的新值和旧值不一样 35 }, 36 } 37 }); 38 39 //1、监视name的改变,并记录原值和新值。有两种实现方式: 40 41 //方式1 使用vm.$watch()方法 42 vm.$watch('name',function(newVal,oldVal){ 43 console.log('我监视到name被修改了','name原值:'+oldVal,'name新值:'+newVal) //name的新值和旧值不一样 44 }); 45 46 </script> 47 </body> 48 </html>
b.监视对象user中name属性的结果变化
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>vue实例方法(数据)</title> 6 <!--引入vue--> 7 <script src="../js/vue.js"></script> 8 </head> 9 10 <body> 11 <div id="hello"> 12 <h1>{{user.name}}</h1> 13 <input type="text" v-model='user.name'> 14 </div> 15 <script> 16 let vm = new Vue({ 17 el:'#hello', 18 data:{ 19 user:{ 20 name:'alice' 21 } 22 }, 23 24 //方式2 使用vm提供的watch选项 25 watch:{ 26 //监视对象user的属性name的改变。使用深度监视的方式 27 // user:{ 28 // handler:(newVal,oldVal)=>{ 29 // console.log('我监视到user对象中的name被修改了','user对象中的name原值:'+oldVal.name,'user对象中的name新值:'+newVal.name) //user.name的新值和旧值一样,对象是指针存储 30 // }, 31 // deep:true //深度监视 32 // }, 33 } 34 }); 35 36 //2、监视user对象中的name 37 //方式1 使用vm.$watch()方法 38 vm.$watch('user',function(newVal,oldVal){ 39 console.log('我监视到user对象中的name被修改了','user对象中的name原值:'+oldVal.name,'user对象中的name新值:'+newVal.name) //user.name的新值和旧值一样,对象是指针存储 40 },{deep:true}); 41 42 </script> 43 </body> 44 </html>