Vuejs2 如何在vuejs中拥有双向绑定可选道具

Vuejs2 如何在vuejs中拥有双向绑定可选道具,vuejs2,two-way-binding,Vuejs2,Two Way Binding,我想在vuejs中有一个可选的双向绑定道具。这意味着我不想从父组件调用testvar.sync=“syncedVariable”,因为有时我对父组件中的testvar的值不感兴趣。但是,除非我在父对象中创建一个变量并同步它,否则我无法在子对象中更改它。这是根据vuejs执行双向绑定变量的推荐方法 实际上,可以进行双向绑定,但有一些限制。假设您有一个子组件,并在其上有一个道具 <child :propName:"something"></child> 但正如你提到的,它还

我想在vuejs中有一个可选的双向绑定道具。这意味着我不想从父组件调用
testvar.sync=“syncedVariable”
,因为有时我对父组件中的
testvar
的值不感兴趣。但是,除非我在父对象中创建一个变量并同步它,否则我无法在子对象中更改它。这是根据
vuejs
执行双向绑定变量的推荐方法


实际上,可以进行双向绑定,但有一些限制。假设您有一个子组件,并在其上有一个道具

<child :propName:"something"></child>
但正如你提到的,它还不是双向绑定。因此,当您尝试更新某些内容时,它会发出警告。但如果你加上:

model : {
    prop : "propName"
}

它现在实际上是一个双向绑定。我不知道为什么,但不能将其用于基本类型。我的意思是,如果你的道具是int或string,你会得到同样的错误。但是如果你使用一个对象,它会工作。我不确定这是否是一个好的做法,但它是有效的。在vue之前,我使用angularjs,这是我最想要的。这就是我找到的解决办法。干杯

不幸的是,答案是否定的,没有现成的方法可以做到这一点

需要做的是创建一个额外的内部变量,然后编写一个计算属性来派生最终值

下面是我为解决同一问题所做的TS示例:

@Prop({default:null})
公共加载:布尔值|空;
私有内部加载:布尔值=false;
私有获取同步加载(){
返回(this.loading!==null)?this.loading:this.internalLoading;
}

这里没有真正的问题。但是如果我理解正确的话,你可以创建一个新的变量,在“mounted()”中用parents值初始化(如果你需要的话)。如果你看代码笔,你会发现它不起作用。有一个问题是肯定的。我只是觉得需要一个道具,一个计算的getter和setter,以及mounted中的另一个变量太过分了。对于可选道具上的双向数据绑定,3个变量是一团乱。如果您现在想象一下,我的组件有许多可选的道具,这些道具有时是我想要跟踪的设置,有时是不需要的,而且是三倍的设置,那么一定有更好的方法,所有这些都会很快变得一团糟。似乎没有必要
props : ["propName"]
model : {
    prop : "propName"
}