通过一个实例,简要介绍计算属性
1.定义:要用的属性不存在,要通过已有属性计算得来
2.原理;底层借助了object.defineproperty方法提供的getter和setter
3.get函数什么时候执行
(1).初次读取时会执行一次
(2).当依赖的数据发生改变时会被再次调用
4.优势:与methods相比,内部有缓存机制(复用),效率更高,调式方便
5.备注:
(1).计算属性最终会出现在vm上,直接读取/操作使用即可
(2).如果计算属性要被修改,那必须写在set函数去响应修改,
且set中药引起==计算时依赖的数据==发生改变
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <div id="root"> 姓 <input type="text" v-model="firstName"> <br> 名 <input type="text" v-model="lastName"> <br> 测试 <input type="text" v-model="x"> <br> 全名 <span>{{fullName}}</span> <br> 全名 <span>{{fullName}}</span> <br> 全名 <span>{{fullName}}</span> <br> <!-- //计算属性的get什么时候被调用? 1.除此读取fullname时,后面使用时会进行缓存。 2.所以来的数据发生改变时 -->
</div> <script> Vue.config.productionTip = false //阻止vue在启动时生成生产提示
const vm =new Vue({ el: '#root', data: { firstName: '张', lastName: '三', x:1 }, computed:{ fullName:{ //get有什么用?当有人读取fullname时就会被调用,返回值就作为fullname的值 //get什么时候被调用? // 1.除此读取fullname时。 // 2.所以来的数据发生改变时 get(){ console.log("get被调用了"); console.log(this);//此处this是mv实例 return this.firstName+'-'+this.lastName // 这里用到的值为 firstNmae、lastName }, //set有什么用?当fullName被修改 //set什么时候被调用? set(value){ const arr=value.split('-') this.firstName=arr[0] this.lastName=arr[1] } } } // 计算属性,和data/methods不一样,它不是直接放在vm上, // 而是调用了get方法,得到返回值后再将返回值放在vm上 }) </script>
|