我需要使用计算更改数据:
<template>
<div>{{ userDataTest }}</div>
</template>
props: {
exampleData: {
type: Object,
required: true,
},
},
computed: {
userDataTest: {
get: function() {
return this.exampleData;
},
set: function(newValue) {
console.log(newValue);
return newValue;
},
},
}
mounted () {
setTimeout(() => {
console.log('Change now to null!');
this.userDataTest = null;
}, 5000);
},
字符串
我使用props获取数据,接下来我使用getter和setter创建计算方法。我在<template>
中添加了userDataTest
。我使用setter将this.userDataTest
中的数据更改为null(使用mounted
)。在setter中的console.log(newValue);
中,我看到newValue
是null
,但在<template>
中没有任何更改,我仍然有来自getter的数据。
为什么setter不将<template>
中的数据更改为null
?
2条答案
按热度按时间wn9m85ua1#
看起来你试图通过返回一个新值来设置computed属性的值,但是Vue实际上并不检查setter的返回值。也许你试图通过一个computed属性来代理一个
data
变量。如果是这样,setter应该在setter主体中设置这个data
变量。例如,你的组件可以声明一个名为
userData
的data
变量,它总是通过一个监视器拥有exampleData
属性的最新值:字符串
然后,你的模板和计算的prop将使用
userData
:型
的数据
e5nszbig2#
局部地改变属性被认为是一种反模式
但是,您可以使用
.sync
修饰符,如下所示,但您不能将prop设置为null
,因为您指定它必须是Object
类型。个字符