javascript - 如何将 `value` 道具和 `v-model` 道具分配给自定义 Vue 组件?
问题描述
我想为“radio div”创建一个自定义 Vue 组件——一个 div(带有一个用于包含我想要的任何内容的插槽),它就像一个单选按钮,因此您可以选择它,并且只能在多个中选择一个一样的名字。
一般来说,VueJS 中的单选按钮如下所示:
<input type="radio" name="name" value="value" v-model="variable" />
所以我想要一个类似的API:
<div-radio name="name" value="value" v-model="variable" />
但是,当我查找如何向自定义组件添加 v-model 支持时,我在 Google 上找到的第一个链接声称:
对于
input
元素,您可以v-model
这样使用:<input v-model="email" />
v-model
翻译为:<input :value="email" @input="e => email = e.target.value" />
如果v-model
转换为:value
,@input
那么似乎不可能同时拥有一个名为“value”的道具和“v-model”——尽管事实上这就是普通的 VueJS 单选按钮的工作方式
我误解了它的v-model
工作原理吗?还是有替代解决方案?还是我想要的只是不可能的?
解决方案
Vue 允许通过组件的选项配置v-model
的prop
名称和名称:event
model
model
2.2.0 中的新功能
类型:
{ prop?: string, event?: string }
细节:
允许自定义组件自定义与 一起使用时使用的道具和事件
v-model
。默认情况下,v-model
在组件上value
用作道具和input
事件,但某些输入类型(例如复选框和单选按钮)可能希望将value
道具用于不同的目的。使用该model
选项可以避免这种情况下的冲突。例子:
Vue.component('my-checkbox', { model: { prop: 'checked', event: 'change' }, props: { // this allows using the `value` prop for a different purpose value: String, // use `checked` as the prop which take the place of `value` checked: { type: Number, default: 0 } }, // ... })
<my-checkbox v-model="foo" value="some value"></my-checkbox>
以上将等价于:
<my-checkbox :checked="foo" @change="val => { foo = val }" value="some value"> </my-checkbox>
推荐阅读
- node.js - 如何猫鼬添加父子类别(嵌套)Node.JS
- php - 上传多个经过 Ajax 清理且有限制的文件
- react-native - 反应原生应用程序中的 GS1 条码扫描仪阅读器
- python - 请问有什么特定的python库可以对用德语或法语写的评论进行情绪分析吗?
- mysql-workbench - 错误后在 MySQL Workbench 中停止脚本
- php - 对特定数组元素值进行排序
- python - 'QuerySet' 对象不支持项目分配
- sql - 根据不同条件对数据进行分组
- python - 将嵌套的 for 循环转换为嵌套的列表推导
- file - 如何从 .m4a 中删除嵌入的图像