道招

vue实现自定义组件的v-model双向数据绑定

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

vue实现自定义组件的v-model双向数据绑定

一般来说我们用v-model是在input中 常见用法如下
<input type="text" v-model="username"> 用户名:{{username}}
其实v-model是一种语法糖,我们要知道它完整的写法才能更好的利用自己vue的理解来深刻理解v-model 上面的语句其本质是下面的:
<input type="text" :value="username" @input="username = $event.target.value"> 用户名:{{username}}
其实我们的自定义组件也是可以实现v-model的,它默认用的属性就是value,事件名为input
Vue.component('child', {
    templage: `
        <input :value="myName" @input="$emit('input', $event.target.value)"/>
    `,
    props:['value'] //这个必然是需要的吗
})
在父组件中我们就这么用
    <child v-model="userName"></child>
这样的用法适合了解v-model的原理,但是其实一般我们用的不多。怎么说呢,我们一般做项目的时候为用的第三方UI库,一些双向数据绑定什么的做的好好的,但是我们还是经常需要基于这些UI库的组件进行二次封装,那样才能更好的满足自己项目的需要嘛,这时候我们可能需要自己封装组件,把UI库的组件包一下,以element-ui为例(此示例只是用于演示)
Vue.component('child', {
    templage: `
        <el -cascader
      :placeholder="placeholder"
      :options="options"
      :show-all-levels="false"
      @change="handleChangeToInput">
    </el>
    `,
    props: {
        options: {
        type: Array,
        default: function() {
            return [];
        }
        },
        placeholder: {
        type: String,
        default: "请选择"
        },
        value:[String,Array]
    },
    handleChangeToInput(value) {
      //直接用emit input事件,方便父组件直接使用v-model实现双向数据绑定
      this.$emit("input", value);
    }
})
element-ui官方给的用法里面写的事件是change事件(源码里面好像有input事件),通过上面的‘二次封装’我们就实现让child组件可以用v-model了 我们可以继续愉快的用
    <child v-model="userName"></child>
注:实际上在较新的版本的vue里面已经支持更改v-model默认用的value属性名和input事件名了
更新时间:
上一篇:前端面试题 小明早餐午餐晚餐下一篇:element-ui动态表单async-validate校验 please transfer a valid prop path to form item!

相关文章

Vue同一路由跳转页面不刷新解决方案及注意事项之二

之前写过一个 《Vue同一路由跳转页面不刷新解决方案及注意事项》 ,在这篇文章里面鞋到了怎么解决这个问题,具体内容可以点击查看,这里简单说一下,就是利用将时间戳传给路由的query,也就导致 $ro 阅读更多…

vue-cli设置css不生效

我们有的项目使用的是老的vue-cli脚手架生成的,今天想写点东西,发现.vue文件里面 style 里面写的样式都不生效了,很自然就想到是不是loader的问题。 在这种项目的webpack.ba 阅读更多…

vue多语言的解决方案不只是 vue-i18n,前端+后端完整解决方案

网上搜很多vue多语言的,一般都是介绍vue-i18n怎么使用,当然这是不错的,但是我们如果只是讲这个的话,只是解决了静态文字的多语言化。 这一部分我们也简单讲一下 npm install 阅读更多…

支持取消单选组件vue版

原生的单选就是 &lt;input type=&quot;radio&quot;/&gt; ,正常情况在 name 相同的单选之间只能选一个,如果只有一个单选框的情况下,一经选中是无法自己取消的,和 阅读更多…

2021年的一点工作总结(一)迁移React技术栈

2021年全年的工作总结起来很简单,算是做苦力的一年吧。。。 2021年春节后就开始邮件项目从Vue迁移到React的工作以及富文本编辑器由wangEditor替换成CKEditor。 其实自己 阅读更多…

vue发送请求是应该在mounted还是在created生命周期

一个经常会被问到的问题: 为什么不在 created 里去发ajax? created 可是比 mounted 更早调用啊,更早调用意味着更早返回结果,那样性能不是更高? 首先,一 阅读更多…

关注道招网公众帐号
友情链接
消息推送
道招网关注互联网,分享IT资讯,前沿科技、编程技术,是否允许文章更新后推送通知消息。
允许
不用了