如下数组,其中ccc属性值根据bbb属性和ddd属性计算得到的,我需要监听数据项的变化,动态计算ccc属性值
export default {
data() {
return {
aaa: [{
bbb: "xxx",
ddd: "xxx",
ccc: ""
}, {
bbb: "yyy",
ddd: "yyy",
ccc: ""
}]
}
}
}
于是我使用了watch监听
watch: {
aaa: {
deep: true,
handler(newValue, oldValue) {
for (let i = 0; i < newValue.length; i++) {
newValue[i].ccc = newValue[i].bbb + newValue[i].ddd;
}
}
}
}
这种方法会导致每个数据项的变动,需要所有数据项都计算一次,有没有什么好的方式?
而且,还有个问题,监听数组并没法获取到旧值,也就是newValue和oldValue是一模一样的,都是新的值。
这个问题主要是讨论性能问题,比如每个数组有100个属性项,又或者ccc是通过耗性能的计算得到的,那么每次数据项的变动都导致所有数据项重新计算一次,这耗费的性能不可想象,所以大家可以想一下,看有没有好的实现方案?? 实现目标是只对变动的数据项进行计算
https://jsbin.com/meteyuyeqe/...,output
比较简单的方式——过滤器或者直接定义一个getter;
还有一个方式就是将动态计算显示的那个属性抽成组件,传入props通过vue的computed去计算,和直接在数据上定义getter原理上是一样的