Vue.js Vue计算方法可以';t使用模板中的setter更改数据
我需要使用计算的更改数据:Vue.js Vue计算方法可以';t使用模板中的setter更改数据,vue.js,get,set,Vue.js,Get,Set,我需要使用计算的更改数据: <template> <div>{{ userDataTest }}</div> </template> props: { exampleData: { type: Object, required: true, }, }, computed: { userDataTest: { get: function() {
<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);
},
{{userDataTest}}
道具:{
示例数据:{
类型:对象,
要求:正确,
},
},
计算:{
userDataTest:{
get:function(){
返回此.exampleData;
},
set:函数(newValue){
console.log(newValue);
返回新值;
},
},
}
挂载(){
设置超时(()=>{
log('立即更改为null!');
this.userDataTest=null;
}, 5000);
},
我使用道具获取数据,然后使用getter和setter创建计算方法。我在
中添加了userDataTest
。并且我使用setter将this.userDataTest
中的数据(使用装入的
)更改为null。
在console.log中(newValue)在setter中,我看到newValue
是null
,但在
中没有任何更改,我仍然从getter中获得数据
为什么setter不将
中的数据更改为null
?您似乎试图通过返回新值来设置计算属性的值,但Vue实际上并没有检查setter的返回值。可能您试图通过计算属性代理数据变量。如果是这样,setter应该在setter主体中设置数据
变量
例如,您的组件可以声明一个名为userData
,它始终通过一个:
导出默认值{
道具:{
示例数据:对象
},
数据(){
返回{
用户数据:{}
}
},
观察:{
exampleData(exampleData){
this.userData=exampleData
}
},
}
然后,您的模板和计算属性将使用userData
:
{{userData}}
导出默认值{
//...
计算:{
userDataTest:{
得到(){
返回此.userData
},
设置(新值){
this.userData=newValue
}
}
}
}
您似乎试图通过返回新值来设置计算属性的值,但Vue实际上并没有检查setter的返回值。可能您试图通过计算属性代理数据变量。如果是这样,setter应该在setter主体中设置数据
变量
例如,您的组件可以声明一个名为userData
,它始终通过一个:
导出默认值{
道具:{
示例数据:对象
},
数据(){
返回{
用户数据:{}
}
},
观察:{
exampleData(exampleData){
this.userData=exampleData
}
},
}
然后,您的模板和计算属性将使用userData
:
{{userData}}
导出默认值{
//...
计算:{
userDataTest:{
得到(){
返回此.userData
},
设置(新值){
this.userData=newValue
}
}
}
}
局部被认为是一种反模式
但是,您可以使用如下所示的,但不能将prop设置为null
,因为您指定它必须是对象
类型
Vue.component('my-component'){
模板:`{userDataTest}}}`,
道具:{
示例数据:{
类型:对象,
必填项:true
}
},
计算:{
userDataTest:{
get:function(){
返回此.exampleData
},
set:函数(newValue){
此.$emit('update:exampleData',newValue)
}
}
},
安装的(){
设置超时(()=>{
console.log('Change now!')
this.userDataTest={}
}, 2500)
}
})
新Vue({
el:“#应用程序”,
数据(){
返回{
示例数据:{
福:“酒吧”
}
}
}
})
局部被认为是一种反模式
但是,您可以使用如下所示的,但不能将prop设置为null
,因为您指定它必须是对象
类型
Vue.component('my-component'){
模板:`{userDataTest}}}`,
道具:{
示例数据:{
类型:对象,
必填项:true
}
},
计算:{
userDataTest:{
get:function(){
返回此.exampleData
},
set:函数(newValue){
此.$emit('update:exampleData',newValue)
}
}
},
安装的(){
设置超时(()=>{
console.log('Change now!')
this.userDataTest={}
}, 2500)
}
})
新Vue({
el:“#应用程序”,
数据(){
返回{
示例数据:{
福:“酒吧”
}
}
}
})
您的setter除了返回输入值之外什么也不做。仅此一点不会产生任何影响。this.userDataTest
始终引用从get方法返回的值,该值与this的值完全相同。exampleData
。你不能变异属性你的setter除了返回输入值之外什么都不做。仅此一项不会产生任何影响。this.userDataTest
始终引用从get方法返回的值,该值与this.exampleData
的值完全相同。u不能对属性进行变异