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 相关文章推荐
一起来写段JS drag拖动代码
Dec 09 Javascript
Javascript setInterval的两种调用方法(实例讲解)
Nov 29 Javascript
Javascript动画效果(4)
Oct 11 Javascript
Bootstrap模态窗口源码解析
Feb 08 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
vue.js简单配置axios的方法详解
Dec 13 Javascript
Vue.js实现的计算器功能完整示例
Jul 11 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
Mar 19 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
Vue3 Composition API的使用简介
Mar 29 Vue.js
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
PHP下几种删除目录的方法总结
2007/08/19 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python字符串转换成浮点数函数分享
2015/07/24 Python
python生成带有表格的图片实例
2019/02/03 Python
python实现计算器功能
2019/10/31 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
remote接口和home接口主要作用
2013/05/15 面试题
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
企业宣传稿范文
2015/07/23 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL