自定义组件的 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)

props  里面 的是   通过props传递,实现父组件值绑定到子组件的属性值

父组件:

引入子组件

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 选项相关推荐

  1. php动态写入vue,Vue自定义动态组件使用详解

    这次给大家带来Vue自定义动态组件使用详解,Vue自定义动态组件的注意事项有哪些,下面就是实战案例,一起来看一下. 现在基于vue的UI组件库有很多,比如iview,element-ui等.但有时候这 ...

  2. 【Echarts】 从入门到自定义封装组件

    目录 一.Echarts 简介 二.怎么使用Echarts 1. Echarts 的下载 2. 在 Vue 中使用 Echarts 3. 小案例 -- 层叠渐变柱状图 三.自定义封装 Echarts ...

  3. vue自定义全局组件(或自定义插件)

    最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用element-ui的时候是使用Vue.use()语句来使用的,而axios的时候,不用Vue.use ...

  4. vue 自定义popup组件并支持scroll组件

    本来是使用第三方库 vant的vue 组件库 的popup,后来在popup中使用better-scroll插件的时候,出现并不兼容的情况,也就自己搭建一个popu插件,中间遇到很多问题,都会记录一下 ...

  5. vue 自定义键盘组件_使用Vue自定义数字键盘组件的方法

    这篇文章主要介绍了关于使用Vue自定义数字键盘组件的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 inp ...

  6. moel vue 自定义v_vue组件,自定义v-model方法

    在使用my-component组件时,为了实现双向绑定. Vue.component('my-component', { props: { obj: Object, }, model: { prop: ...

  7. vue自定义component组件

    目的 在写页面时,经常会有些共用的标题,这时我们可以把它写成一个组件,当标题的内容修改时,其它内容也会修改. 实现 组件内容 首先写一个标题组件,命名为title,路径为@/components/ti ...

  8. vue 自定义弹窗组件

    父组件 <template><div><p @click="onDelete">打开</p><!-- 弹框 -->< ...

  9. Vue自定义拖组件 vuedraggable 和 vue-dragging

    一.描述 之前用 vue 写过一个在线的多二维码生成服务,体验地址:https://postbird.gitee.io/vue-online-qrcode/ 后面发现二维码多了之后有时候想要排序,需要 ...

最新文章

  1. 嘿!我用python帮我干这些事
  2. List 在迭代时可能抛出的异常
  3. 学习曾国藩,学做人做事学技术
  4. php图片旋转显示不出来的,php – 我服务的图像不正确,它们都显示为旋转90度
  5. 【数据库】MySQL表的增删改查
  6. 机器学习-吴恩达-笔记-12-推荐系统
  7. C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库
  8. linux下使用gpio控制代码,zynq linux 下控制gpio的c代码
  9. 查找 -- 7.1 Sear for a Range -- 图解
  10. 颜色对照表(五)(16进制、RGB、CMYK、HSV、中英文名)
  11. 服务器硬件维护指南和解决方案
  12. WPF桌面应用实例(二):写一个扫雷游戏
  13. 用友U9 BOM全阶展开 代码如下
  14. vi 从第几行到第几行 替换_vi命令加行号查找替换等命令
  15. Linux安装 Oracle 19C 实操
  16. python菜鸟学习Day9(requests,套接字socket)
  17. IntelliJ IDEA查看类层次结构图
  18. 关于Chrome浏览器的一些使用技巧
  19. 超市会员管理系统,数据库课程设计
  20. 【财报解读】营业利润、净利润、毛利润三者之间的关系

热门文章

  1. jQuery中的slideUp()、slideDown()、hide()、show()
  2. Git存管代码,实例演示
  3. LinkedHashMap 实现缓存(LRU、FIFO、weakhashMap)
  4. 8个独立按键控制LED
  5. 使用坚果云同步SVN服务器数据
  6. Java连接数据库(1)
  7. 第4周实践项目1 建立单链表(非多组织结构)
  8. diag--创建对角矩阵
  9. static_cast函数
  10. opencv求解AX=0