vue在自定义组件中使用v-model
示例:
组件中
<template> <!-- 自定义组件中使用v-mode指令 --> <input type="search" @input="changeInput" data-myValue=""> </template> <script> export default { name: 'CustomModel', // 当我们使用model的默认值的时候value作prop,input作event时,可以省略不写model。 model: { prop: 'myValue', // 默认是value event: 'myInput', // 默认是input }, props: { // 接收string和number类型的值, // 注意不能是写成字符串["String","Number"],因为此时它们是构造器,是全局变量 myValue: [String, Number], }, methods: { changeInput ($event) { // 向上派发myInput事件,这样model监听myInput才有意义:当输入字符时触发input事件, // 进而派发触发自定义的myInput事件,然后model监听myInput,就实现了数据绑定 this.$emit('myInput', $event.target.value) }, } } </script>
组件外:
<template> <div class="home"> <h3>输入的实时内容:{{ myValue }}</h3> <custom-model v-model="myValue"></custom-model> </div> </template> <script> import CustomModel from './CustomModel' export default { name: 'Home', components: { CustomModel, }, data () { return { myValue: '' } }, } </script>
关键点:
关键的model。model是允许vue自定义组件使用v-model的关键,虽然有时我们不显性的使用它,也不影响我们在自定义组件中使用v-model指令,这只是因为被设置默认值。而有的时候,显示的使用,并自定义model的prop和event会有益。这是官网关于model的介绍:
允许一个自定义组件在使用
v-model
时定制 prop 和 event。默认情况下,一个组件上的v-model
会把value
用作 prop 且把input
用作 event,但是一些输入类型比如单选框和复选框按钮可能想使用value
prop 来达到不同的目的。使用model
选项可以回避这些情况产生的冲突。----本段摘自vue官网
链接:https://juejin.cn/post/7087246620609216549