首页 > 代码库 > Vue之计算属性
Vue之计算属性
上一篇里演示了计算属性的优点,但是,computed和data里的属性还是有区别的,computed的一个弱点就在于依赖于data属性的更新,才能触发视图更新。
举个例子:
上个例子中谈到用v-for来加载妹子图片,现在我想在原先的基础上,添加两个按钮,一个用来增加一个妹子,一个用来减少一个妹子:
html:
<div id="vfor"> <template v-for="mm in mms"> <span>{{mm.name}}</span> <image :src="mm.location"></image> </template> <button @click="addM">增加一个mm</button> <button v-on:click="removeM">减少一个mm</button> </div>
js:
var app14=new Vue({ el:‘#vfor‘, data:{ mms:[{name:‘mm1‘,location:‘http://image.zhangxinxu.com/image/study/s/s128/mm1.jpg‘}, {name:‘mm2‘,location:‘http://image.zhangxinxu.com/image/study/s/s128/mm2.jpg‘}, {name:‘mm3‘,location:‘http://image.zhangxinxu.com/image/study/s/s128/mm3.jpg‘}, {name:‘mm4‘,location:‘http://image.zhangxinxu.com/image/study/s/s128/mm4.jpg‘} ], methods:{ addM:function(){//增加一个MM var len=this.mms.length; function mmCreate(i){ var mmX={}; mmX.name=‘mm‘+i; mmX.location=‘http://image.zhangxinxu.com/image/study/s/s128/mm‘+i+‘.jpg‘; return mmX; } }, removeM:function(){//减少一个MM this.mms.pop(); } } });
这里通过button分别触发addM()和removeM()方法,分别为mms数组增加一个元素和减少一个元素,实现了视图上的MM的增加和减少。
使用computed属性
现在,我觉得初始化data里的mms属性太麻烦,所以准备在computed里面,用一个循环来初始化mms:
js:
computed:{ mms:function(){ var arr=[]; for(var i= 1;i<4;i++){ var temObj={}; temObj.name=‘mm‘+i; temObj.location=‘http://image.zhangxinxu.com/image/study/s/s128/mm‘+i+‘.jpg‘; arr.push(temObj); } return arr; } }
通过一个函数返回arr。注意这里的computed属性没有依赖任何的data属性。
这样做,对于初始化mms来说是没问题的。但是当点击增加一个mm按钮时,视图并没有更新,尽管mms数组发生了变化。原因就是上面所说的
computed properties are cached based on their dependencies. A computed property will only re-evaluate when some of its dependencies have changed.
Vue之计算属性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。