我试图让这个自定义单选按钮组件在vuejs中工作 . 如何使用父组件中的值检查单选按钮 . 我知道你使用v-model并将其设置为其中一个输入值中的相同值,但它似乎无法使其工作 .
零件:
export default Vue.component('radioButton', {
template,
props: ['name', 'label', 'id', 'value']
})
组件模板:
<label class="radio" :for="id">
<input type="radio" :id="id" class="radio-button" :value="value" :name="name">
<span class="radio-circle">
</span>
<span class="radio-circle__inner">
</span>
<span class="radio-button__label">{{ label }}</span>
</label>
HTML:
<radio-button name="options" id="option-1" label="1" :value="selectedValue" />
<radio-button name="options" id="option-2" label="2" :value="selectedValue" />
2 回答
对于单选按钮,您需要为checked属性传递true或false以将其预设为某种状态 . 或者,
v-model
中的值应等于单选按钮的value
,以便检查它 .在您发布的有限示例代码中,我相信您的标签是按钮索引,如
1
,2
,3
等等......我认为您希望在selectedValue
匹配该单选按钮的label
时选择其中一个按钮 . 例如,如果selectedValue为2,则需要选中单选按钮2 .假设以上是正确的,您需要在
radio-button
组件模板中进行一行更改:注意:
您的按钮
label
是单选按钮的值 . 当您单击特定单选按钮时,这是您希望设置为selectedValue的内容 .子组件中的
value
实际上是父组件的selectedValue
,表示当前选择的单选按钮 . 所以这应该进入v-model
因此,根据Form Input Bindings上的文档,如果v-model变量等于该单选按钮的值,则会检查单选按钮 .
但现在这是另一个问题:如果单击另一个单选按钮,您希望父组件中的
selectedValue
更改 . 这不会发生,因为props
只给你单向绑定 .要解决此问题,您需要从子组件(单选按钮)执行$ emit并在父组件(表单)中捕获它 .
这是一个有效的jsFiddle示例:https://jsfiddle.net/mani04/3uznmk72/
在此示例中,表单模板定义了单选按钮组件,如下所示:
只要值在子组件内部发生变化,它就会传递"change"事件以及单选按钮的标签,该标签将传递给父表单组件的
changeValue()
方法 . 父组件更改selectedValue
后,您的单选按钮会自动更新 .希望能帮助到你!
我个人会这样做,保持一个v-model指令并避免@change事件(如果必须执行任何其他逻辑,可以用@input替换) . 这里的事情是我的v模型值等于单选按钮组件中的“值”道具 .
因此,您所要做的就是传递实际当前值以进行一些检查,并在点击标签时$ $发出值,或者如果您没有任何标签则更改输入 .
我还添加了(但评论它)一个带有简单html标记的版本,以防你需要自定义单选按钮:
https://jsfiddle.net/Zyfraglover/1qzmxo9a/