我正在Vue中创建一个简单的开关切换组件,该组件具有v模型和@updated。但是当用户切换开关时,我似乎无法更改模型。首先,我遇到了错误,以避免直接更改道具。但是现在我又遇到了另一个错误。
[Vue警告]:已将计算属性“ isSwitchOn”分配给它,但没有设置器。
该组件旨在像这样使用
<iswitch v-model="switchGender" @updated="handleUpdatedGender" />
Run Code Online (Sandbox Code Playgroud)
这是组件本身
export default {
template: `
<span
@click="toggleSwitch"
:class="{ active: isSwitchOn }">
<span class="toggle-knob"></span>
</span>
`,
props: ['value'],
methods:
{
toggleSwitch()
{
this.isSwitchOn = !this.isSwitchOn
this.$emit('input', this.isSwitchOn)
this.$emit('updated')
}
},
computed:
{
isSwitchOn()
{
return this.value
}
},
};
Run Code Online (Sandbox Code Playgroud)
该错误是由以下语句触发的:this.isSwitchOn = !this.isSwitchOn。您正在尝试为计算属性分配值,但未提供setter。
您需要按以下方式定义您的计算属性,才能将其用作getter和setter:
computed:
{
isSwitchOn:
{
get()
{
return this.value
},
set(value)
{
this.value = value
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,不建议直接更改道具。您可以做的是添加一个新的data属性,并value使用观察程序将其与prop 同步。
我认为类似这样的方法会起作用:
props: ['value'],
data()
{
return {
val: null
}
},
computed:
{
isSwitchOn:
{
get()
{
return this.val
},
set(value)
{
this.val = value
}
}
},
watch: {
value(newVal) {
this.val = newVal
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4269 次 |
| 最近记录: |