vue如何在自定义组件中使用v-model


Posted in Javascript onMay 14, 2018

v-model指令

所谓的“指令”其实就是扩展了HTML标签功能(属性)。

先来一个组件,不用vue-model,正常父子通信

<!-- parent -->
<template>
<div class="parent">
  <p>我是父亲, 对儿子说: {{sthGiveChild}}</p>
  <Child @returnBack="turnBack" :give="sthGiveChild"></Child>
</div>
</template>
<script>
import Child from './Child.vue';
export default {
  data() {
    return {
      sthGiveChild: '给你100块'
    };
  },
  components: {
    Child
  },
  methods: {
    turnBack(val) {
      this.sthGiveChild = val;
    }
  }
}
</script>
<!-- child -->
<template>
<div class="child">
  <p>我是儿子,父亲对我说: {{give}}</p>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="returnBackFn">回应</a>
</div>
</template>
<script>
export default {
  props: {
    give: String
  },
  methods: {
    returnBackFn() {
      this.$emit('returnBack', '还你200块');
    }
  }
}
</script>

点击回应后,父亲对儿子说的话变成了儿子的回应。儿子收到的信息也变了,实现通信。

改用v-model

<!-- parent -->
<template>
<div class="parent">
  <p>我是父亲, 对儿子说: {{sthGiveChild}}</p>
  <Child v-model="sthGiveChild"></Child>
</div>
</template>
<script>
import Child from './Child.vue';
export default {
  data() {
    return {
      sthGiveChild: '给你100块'
    };
  },
  components: {
    Child
  }
}
</script>
<!-- child -->
<template>
<div class="child">
  <p>我是儿子,父亲对我说: {{give}}</p>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="returnBackFn">回应</a>
</div>
</template>
<script>
export default {
  props: {
    give: String
  },
  model: {
    prop: 'give',
    event: 'returnBack'
  },
  methods: {
    returnBackFn() {
      this.$emit('returnBack', '还你200块');
    }
  }
}
</script>

文案虽有不同,但是效果最终是一致的。

看看官方自定义组件的v-model

官方例子https://vuefe.cn/v2/api/#model

有这么一句话: 默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event。

尝试把上边子组件的例子改一下,也是跑的通的

<!-- child -->
<template>
<div class="child">
  <p>我是儿子,父亲对我说: {{value}}</p>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="returnBackFn">回应</a>
</div>
</template>
<script>
export default {
  props: {
    value: String
  },
  methods: {
    returnBackFn() {
      this.$emit('input', '还你200块');
    }
  }
}
</script>

做一下总结:

如果你懒,不想自己去处理事件,那就用默认的 'value' && 'input' 事件去处理,如果用原生事件的,甚至连model属性也可以省去。

如果你想自己的代码比较明确,区分出自定义事件,那么下面的组合才是你的菜。

prop和event看你自己心情定义,当然要知名见意【尽量避开关键字】

model: {
prop: 'someProp', // 注意,是prop,不带s。我在写这个速记的时候,多写了一个s,调试到怀疑人生
event: 'someEvent'
}
this.$emit('someProp', [returnValueToParent])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
event.X和event.clientX的区别分析
Oct 06 Javascript
getElementByIdx_x js自定义getElementById函数
Jan 24 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
FullCalendar日历插件应用之数据展现(一)
Dec 23 Javascript
原生javascript实现图片无缝滚动效果
Feb 12 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
微信小程序修改swiper默认指示器样式的实例代码
Jul 18 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
VUE安装使用教程详解
Jun 03 Javascript
JavaScript代码异常监控实现过程详解
Feb 17 Javascript
JavaScript常用数学函数用法示例
May 14 #Javascript
JavaScript中常见内置函数用法示例
May 14 #Javascript
纯js封装的ajax功能函数与用法示例
May 14 #Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 #Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
May 14 #Javascript
jQuery中元素选择器(element)简单用法示例
May 14 #jQuery
jQuery中的类名选择器(.class)用法简单示例
May 14 #jQuery
You might like
一个SQL管理员的web接口
2006/10/09 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
Python数组定义方法
2016/04/13 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
最新奶茶店创业计划书
2014/01/25 职场文书
摄影展策划方案
2014/06/02 职场文书
化学教育专业自荐信
2014/07/04 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
学校食品安全责任书
2015/01/29 职场文书
律师函格式范本
2015/05/27 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
redis内存空间效率问题的深入探究
2021/05/17 Redis
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python