淘先锋技术网

首页 1 2 3 4 5 6 7

在Vue中,computed是我们常用的一个模块,它可以根据所监听的数据自动计算出结果,而不需要手动调用函数计算。当依赖的数据发生变化时,computed会重新计算,这样我们就可以方便地处理数据的变化。

在Vue中,computed默认只会对其直接依赖的数据进行浅监听,在依赖的数据发生改变时才会重新计算。但是,当我们希望在依赖数据的嵌套对象中某个属性值改变时也触发computed重新计算,这时我们需要使用deep属性。将deep属性设置为true,就可以进行深层监听了。

Vue.component('example', {
props: ['obj'],
computed: {
deepObj: {
// 开启深度监听
deep: true,
// 计算属性
get: function() {
return this.obj;
},
set: function(val) {
this.$emit('update:obj', val);
}
}
}
});

上面的代码中,我们创建了一个组件,在组件的computed属性中创建了一个deepObj的计算属性。该计算属性监听了props传来的obj,开启了深度监听。当obj的值发生变化时,深度监听可以监听到内部属性值的变化,并触发computed的重新计算。

在Vue中,使用深度监听需要注意的是,由于它需要深入嵌套对象中去监听内部属性,因此每一次数据的变化都会触发重新计算,对于性能的消耗是很大的。在使用深度监听时需要注意对数据结构的优化,尽可能地减少对象层数,避免不必要的数据变化,从而提升应用的性能。

var vm = new Vue({
data: {
obj: {
a: {
b: {
c: 1
}
}
}
},
computed: {
// 使用deep深度监听
deepObj: {
deep: true,
get: function() {
return this.obj;
}
}
}
});
vm.deepObj.a.b = {c:2};

在上面的代码中,我们初始化了一个Vue实例,该实例数据中包含一个嵌套对象。通过给computed所监听的数据开启深度监听,我们可以监听到嵌套对象中c属性值的变化。在修改b属性值时,由于我们开启了深度监听,因此computed重新计算,并将新的对象返回到deepObj中。

在Vue中,我们可以随时开启和关闭深度监听,只需要在computed属性中添加或移除deep属性即可。同时,我们可以使用watcher来完成更为复杂的监听,实现我们在Vue应用中所需要的各种效果。