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 相关文章推荐
document.designMode的功能与使用方法介绍
Nov 22 Javascript
javascript中日期转换成时间戳的小例子
Mar 21 Javascript
Javascript实现视频轮播在pc端与移动端均可
Sep 29 Javascript
Javascript:为input设置readOnly属性(示例讲解)
Dec 25 Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 Javascript
fullpage.js全屏滚动插件使用实例
Sep 06 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
Feb 23 Javascript
原生JS发送异步数据请求
Jun 08 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
Jun 14 Javascript
Avalonjs双向数据绑定与监听的实例代码
Jun 23 Javascript
使用Dropzone.js上传的示例代码
Oct 10 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 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
把77A收信机改造成收音机
2021/03/02 无线电
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
input框中的name和id的区别
2016/11/16 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
python实现简单ftp客户端的方法
2015/06/28 Python
python2.7安装图文教程
2018/03/13 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
python3获取当前目录的实现方法
2019/07/29 Python
深入浅析python的第三方库pandas
2020/02/13 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
C# Debug和Testing相关面试题
2015/10/25 面试题
客户代表自我评价范例
2013/09/24 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
我爱我家教学反思
2014/05/01 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
党支部承诺书
2015/01/20 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
吴仁宝观后感
2015/06/09 职场文书
员工安全责任协议书
2016/03/22 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python