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实现动态增加文件域表单
Feb 12 Javascript
Firefox window.close()的使用注意事项
Apr 11 Javascript
JQuery验证工具类搜集整理
Jan 16 Javascript
两个数组去重的JS代码
Dec 04 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
AngularJs bootstrap搭载前台框架——基础页面
Sep 01 Javascript
深入理解JS实现快速排序和去重
Oct 17 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
JS的Ajax与后端交互数据的实例
Aug 08 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
Javascript----文件操作
2007/01/18 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
js单例模式的两种方案
2013/10/22 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
市级文明单位申报材料
2014/05/07 职场文书
品酒会策划方案
2014/05/26 职场文书
微笑服务标语
2014/06/24 职场文书
拾金不昧感谢信
2015/01/21 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
分析Python list操作为什么会错误
2021/11/17 Python
html5调用摄像头截图功能
2022/01/18 Javascript
java版 简单三子棋游戏
2022/05/04 Java/Android