vue 自定义封装组件 使用 model 选项
自定义组件的 v-model
一个组件上的 v-model
默认会利用名为 value
的 prop 和名为 input
的事件,但是像单选框、复选框等类型的输入控件可能会将 value
特性用于不同的目的。model
选项可以用来避免这样的冲突:
Vue.component('base-checkbox', {model: {prop: 'checked',event: 'change'},props: {checked: Boolean},template: `<inputtype="checkbox"v-bind:checked="checked"v-on:change="$emit('change', $event.target.checked)">` })
现在在这个组件上使用 v-model
的时候:
<base-checkbox v-model="lovingVue"></base-checkbox>
这里的 lovingVue
的值将会传入这个名为 checked
的 prop。同时当 <base-checkbox>
触发一个 change
事件并附带一个新的值的时候,这个 lovingVue
的属性将会被更新。
注意你仍然需要在组件的 props
选项里声明 checked
这个 prop。
原来的没有封装的代码:
<FormItem label="适用胸型" prop="chestShape"><Select multiple v-model="chestShape" @on-change="changeChestShape"><Optionv-for="(item,index) in chestShapeReqList":value="item.dictValue":key="index">{{ item.dictLabel }}</Option></Select></FormItem><FormItem label="有无钢圈" prop="hasSteel"><Select multiple v-model="hasSteel" @on-change="changeHasSteel"><Optionv-for="(item,index) in hasSteelReqList":value="item.dictValue":key="index">{{ item.dictLabel }}</Option></Select></FormItem><FormItem label="功能" prop="hasFunction"><Select multiple v-model="hasFunction" @on-change="changwHasFunction"><Optionv-for="(item,index) in hasFunctionReqList":value="item.dictValue":key="index">{{ item.dictLabel }}</Option></Select></FormItem><FormItem label="压力" prop="pressure"><Select multiple v-model="pressure" @on-change="changePressure"><Optionv-for="(item,index) in pressureReqList":value="item.dictValue":key="index">{{ item.dictLabel }}</Option></Select></FormItem><FormItem label="组合形式" prop="makeupType"><Select multiple v-model="makeupType" @on-change="changeMakeupType"><Optionv-for="(item,index) in makeupTypeReqList":value="item.dictValue":key="index">{{ item.dictLabel }}</Option></Select></FormItem>
这段代码里面的相识度很高 我们可以封装起来
子组件 :
新建文件 select/seclect.vue
<template><FormItem :label="label" :prop="prop"><Select :multiple="multiple" v-if="listData.length>0" :value="modelValue" @change="updateVal($event.target.value)" ><Optionv-for="(item,index) in listData":value="item.dictValue":key="index">{{ item.dictLabel }}</Option></Select></FormItem> </template> <script> export default {name: 'com-select',props: {listData: {type: Array,default: () => []},label:String,multiple:Boolean,prop:String,modelValue:Array,},model: {prop: 'modelValue',event: 'selectData'},data () {return {}},computed: {},methods: {updateVal(val){this.$emit('selectData',val)}} } </script>
从官网上看到,v-model在内部为不同的输入元素使用不同的属性并抛出不同的事件:
text和textarea元素使用value属性和input事件
checkbox和radio使用checked属性和change事件
select使用value和change事件
因为自定的组件并没有默认的value和input事件,在使用时,我们需要按照上面那样显式的去声明定义这些东西。这时,需要model选项,在定义组件的时候,指定prop的值和监听的事件。
model: {prop: 'modelValue',event: 'selectData'},
model 选项中的prop 对应 =》 :value="modelValue" 的名字
model 选项中的 event 对应的是 this.$emit('selectData',val) 的 事件名字 this.$emit('selectData',val)
父组件:
引入子组件
import SelectCom from '../../components/Select/Select'
使用组件
components: {SelectCom },
<SelectCom label="基础风格" :listData="productStyleList" v-model="sty" prop="style" :multiple="multiple" @selectData="styl(e)" />
productStyleList 是传递进去的数组
v-model="sty" 双向绑定的值
@selectData="styl(e)" : 触发的事件
转载于:https://www.cnblogs.com/guangzhou11/p/11276098.html
vue 自定义封装组件 使用 model 选项相关推荐
- php动态写入vue,Vue自定义动态组件使用详解
这次给大家带来Vue自定义动态组件使用详解,Vue自定义动态组件的注意事项有哪些,下面就是实战案例,一起来看一下. 现在基于vue的UI组件库有很多,比如iview,element-ui等.但有时候这 ...
- 【Echarts】 从入门到自定义封装组件
目录 一.Echarts 简介 二.怎么使用Echarts 1. Echarts 的下载 2. 在 Vue 中使用 Echarts 3. 小案例 -- 层叠渐变柱状图 三.自定义封装 Echarts ...
- vue自定义全局组件(或自定义插件)
最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用element-ui的时候是使用Vue.use()语句来使用的,而axios的时候,不用Vue.use ...
- vue 自定义popup组件并支持scroll组件
本来是使用第三方库 vant的vue 组件库 的popup,后来在popup中使用better-scroll插件的时候,出现并不兼容的情况,也就自己搭建一个popu插件,中间遇到很多问题,都会记录一下 ...
- vue 自定义键盘组件_使用Vue自定义数字键盘组件的方法
这篇文章主要介绍了关于使用Vue自定义数字键盘组件的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 inp ...
- moel vue 自定义v_vue组件,自定义v-model方法
在使用my-component组件时,为了实现双向绑定. Vue.component('my-component', { props: { obj: Object, }, model: { prop: ...
- vue自定义component组件
目的 在写页面时,经常会有些共用的标题,这时我们可以把它写成一个组件,当标题的内容修改时,其它内容也会修改. 实现 组件内容 首先写一个标题组件,命名为title,路径为@/components/ti ...
- vue 自定义弹窗组件
父组件 <template><div><p @click="onDelete">打开</p><!-- 弹框 -->< ...
- Vue自定义拖组件 vuedraggable 和 vue-dragging
一.描述 之前用 vue 写过一个在线的多二维码生成服务,体验地址:https://postbird.gitee.io/vue-online-qrcode/ 后面发现二维码多了之后有时候想要排序,需要 ...
最新文章
- 嘿!我用python帮我干这些事
- List 在迭代时可能抛出的异常
- 学习曾国藩,学做人做事学技术
- php图片旋转显示不出来的,php – 我服务的图像不正确,它们都显示为旋转90度
- 【数据库】MySQL表的增删改查
- 机器学习-吴恩达-笔记-12-推荐系统
- C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库
- linux下使用gpio控制代码,zynq linux 下控制gpio的c代码
- 查找 -- 7.1 Sear for a Range -- 图解
- 颜色对照表(五)(16进制、RGB、CMYK、HSV、中英文名)
- 服务器硬件维护指南和解决方案
- WPF桌面应用实例(二):写一个扫雷游戏
- 用友U9 BOM全阶展开 代码如下
- vi 从第几行到第几行 替换_vi命令加行号查找替换等命令
- Linux安装 Oracle 19C 实操
- python菜鸟学习Day9(requests,套接字socket)
- IntelliJ IDEA查看类层次结构图
- 关于Chrome浏览器的一些使用技巧
- 超市会员管理系统,数据库课程设计
- 【财报解读】营业利润、净利润、毛利润三者之间的关系