【发布时间】:2019-09-20 03:53:35
【问题描述】:
我遇到了一些我无法理解的奇怪行为。
我有一个简单的单选按钮组件,用作实际单选按钮的“包装器”。
在这个组件上,我有 inheritAttrs: false 并在元素本身上使用 v-bind="$attrs",所以我可以使用 v-model 和 value 等。
但是,在选择单选按钮时,会抛出一个错误,即 prop 值无效(因为它是一个事件而不是字符串),有趣的是,我注意到在初始渲染时,在 Vue Devtools 中 value prop 是空白的。
我只是想让这些单选按钮使用所选单选按钮的字符串值更新location 的父级数据对象值。
我无法弄清楚我到底哪里出错了。非常感谢任何帮助。
问题的示例项目: https://codesandbox.io/embed/m40y6y10mx
FormMain.vue
<template>
<div>
<p>Location: {{ location }}</p>
<form-radio
id="location-chicago"
v-model="location"
value="Chicago"
name="location"
label="Chicago"
@change="changed"
/>
<form-radio
id="location-london"
v-model="location"
value="London"
name="location"
label="London"
@change="changed"
/>
</div>
</template>
<script>
import FormRadio from "./FormRadio.vue";
export default {
name: "FormMain",
components: {
FormRadio
},
data() {
return {
location: ""
};
},
methods: {
changed(e) {
console.log("Change handler says...");
console.log(e);
}
}
};
</script>
FormRadio.vue
<template>
<div>
<label :for="id">
{{ label }}
<input
:id="id"
type="radio"
:value="value"
v-on="listeners"
v-bind="$attrs"
>
</label>
</div>
</template>
<script>
export default {
name: "FormRadio",
inheritAttrs: false,
props: {
id: {
type: String,
required: true
},
label: {
type: String,
required: true
},
value: {
type: String,
required: true
}
},
computed: {
listeners() {
return {
...this.$listeners,
change: event => {
console.log("Change event says...");
console.log(event.target.value);
this.$emit("change", event.target.value);
}
};
}
}
};
</script>
【问题讨论】:
-
奇怪的是你同时设置了
v-model和value-v-model应该是值的真实来源 -
但是我如何指定每个单选按钮都有自己的值来设置?否则你会怎么做?
-
要建立一个示例答案...
-
谢谢。如果您可以使用 Codesandbox,那就太好了。
-
您如何尝试在 2 个不同的元素上使用相同的
v-model有点令人困惑,因为它会决定两个元素的值
标签: javascript vue.js