Vue2和Vue3如何在组件中使用V-model
Vue2
先看看下面这两个组件自己理解一下。
父组件
<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>
子组件
<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', // 默认是valueevent: '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>
我们都知道,一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件。
Vue.component('custom-input', {props: ['value'],template: `<inputv-bind:value="value"v-on:input="$emit('input', $event.target.value)">`
})
<custom-input v-model="searchInput"></custom-input>
但是像单选框、复选框等类型的输入控件可能会将 value 作为服务器提交时的内容,可以通过 mode 来指定其他属性
Vue.component('custom-checkbox', {model: {prop: 'checked',event: 'change'},props: {checked: Boolean},template: `<inputtype="checkbox"v-bind:checked="checked"v-on:change="$emit('change', $event.target.checked)">`
})
<custom-checkbox v-model="selectFramework"></custom-checkbox>
标题Vue3
v-model prop 和事件默认名称已更改:
prop属性:value 变为-> modelValue; event事件:input 变为-> update:modelValue;
在 3.x 中,自定义组件上的 v-model 相当于传递了 modelValue prop 属性并接收抛出的 update:modelValue 事件:
Vue.component('custom-input', {props: ['modelValue'],template: `<inputv-bind:value="modelValue"v-on:input="$emit('update:modelValue', $event.target.value)">`
})
<custom-input v-model="searchInput"></custom-input>
v-model参数新增
若需要更改 model 名称,而不是更改组件内的 model 选项,那么现在我们可以将一个参数传递给 model:
Vue.component('custom-checkbox', {props: {checked: Boolean},template: `<inputtype="checkbox"v-bind:checked="checked"v-on:change="$emit('update:checked', $event.target.checked)">`
})
<custom-checkbox v-model:checked="selectFramework"></custom-checkbox>
我们在上面的代码中可以看到 v-model 后面加上了冒号传递参数 :checked ,表示 v-model 绑定的是 checked 属性,在触发的事件通过 update:属性 指定,注意格式是固定的,必须 update: 加上属性名称。
sync修饰符删除
如果需要的话,父级可以监听该事件并更新本地 data property。例如:
<custom-checkbox :checked="selectFramework" @update:checked="selectFramework = $event"></custom-checkbox>
为了方便起见,我们可以使用 .sync 修饰符来缩写,如下所示:
<custom-checkbox :checked.sync="selectFramework"></custom-checkbox>
vue3 中 bind 的 .sync 修饰符和组件的 model 选项已移除,统统都要使用 v-model 作为代替;
<custom-checkbox v-model:checked="selectFramework"></custom-checkbox>
而且允许我们在自定义组件上使用多个 v-model。
<ChildComponent v-model:title="pageTitle" v-model:content="pageContent" /><!-- 简写: --><ChildComponent:title="pageTitle"@update:title="pageTitle = $event":content="pageContent"@update:content="pageContent = $event"
/>
之前是自定义组件上只能使用一个,现在改为可以使用多个了。
Vue2和Vue3如何在组件中使用V-model相关推荐
- vue2 在element-ui的rate组件中,使用iconfont的图标
背景: 在收到的设计稿里看到这么一个内容:20个人形图标,通过图标数目展示男女比例. 当然,通过计算的方式,使用div一个一个的把图标循环显示出来也不是不可以.但我是一个懒人,如果是有组件可用,一定是 ...
- vue3使用element组件中的Image导致频闪
↓ 只需要把el-image标签换成原生img标签就可以了.
- vue2、vue3中自定义v-model的使用和区别
在我们的日常开发中,时常需要写一些自定义组件,而其中可能就会使用到v-model,v-model是Vue中的一个指令,用来实现数据的双向绑定,实现数据.视图更新,v-model是一个语法糖,,我们可以 ...
- Vue2.和Vue3.生命周期的区别,对比。 详解生命周期中的每个钩子函数,setup,
文章目录 #1.Vue2.的生命周期与Vue3.的生命周期对比图 #1.1白色背景图是Vue2.的生命周期,黑色背景图是Vue3.的生命周期. #2.Vue2.与Vue3.的生命周期函数的不同 #2. ...
- 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等
Vue3自考题 1,如何使用vue3的组合式api 答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 2,computed 与各个watch之 ...
- 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
因为 Diff 算法,计算的就是虚拟 DOM 的差异,所以先铺垫一点点虚拟 DOM,了解一下其结构,再来一层层揭开 Diff 算法的面纱,深入浅出,助你彻底弄懂 Diff 算法原理 认识虚拟 DOM ...
- Vue2与Vue3中Ref绑定元素
Vue之Ref绑定元素获取实例 我们可以通过给元素绑定ref属性来获取这个元素的实例,来调用实例中的某种方法来实现某种功能 Vue2实现 <template><!-- 单个绑定 -- ...
- vue2和vue3中mixins的使用
混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被"混合"进入该组件 ...
- 在vue2、vue3中基于Three.js使用多张全方位照片拼接全景vr效果
在vue2.vue3中基于Three.js使用多张全方位照片拼接全景vr效果 Vue3 代码如下(示例): <template><div class="Create&quo ...
最新文章
- 计算机二级基础知识教材,国家计算机二级考试公共基础知识教材
- python中json模块_Python的标准模块包json的实例用法
- 【雅礼集训2017】字符串【后缀自动机】【数据分治】
- Quartz作业调度框架及时间表达式的含义和语法
- Simple IOCP Server代码解读
- 工业和信息化部办公厅关于公布2021年产业技术基础公共服务平台复核结果的通知
- shiro中文api_Shiro
- dj鲜生-09-商品应用-首页的显示
- cilium插件测试_Cilium网络概述
- python源代码下载地址
- 中国数字化转型的未来与建议
- 电商系统(毕业设计)
- 大学生如何应聘高薪IT职位
- Win7去掉/恢复快捷方式箭头
- RESTful API及其设计思想
- 筷子兄弟--11度青春系列电影之老男孩,相信你会感动!!
- java 轨迹平滑算法_地图坐标轨迹平滑和纠偏
- [转]辨别常见与不常见音乐文件格式的质量好坏!
- 3G门户Android面试题(2013年)
- IE浏览器提示无法安全地连接到此页面,这可能是因为该站点使用过期的或不安全的 TLS 安全设置.该如何解决?