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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
三种AngularJS中获取数据源的方式
Feb 02 Javascript
Bootstrap按钮下拉菜单组件详解
May 10 Javascript
JS函数的定义与调用方法推荐
May 12 Javascript
新入门node.js必须要知道的概念(必看篇)
Aug 10 Javascript
AngularJS入门教程之模块化操作用法示例
Nov 02 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
Feb 13 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
vue点击自增和求和的实例代码
Nov 06 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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
ajax缓存问题解决途径
2006/12/06 PHP
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP无限分类(树形类)
2013/09/28 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
javascript实现下雨效果
2017/03/27 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
python print出共轭复数的方法详解
2019/06/25 Python
Django框架视图函数设计示例
2019/07/29 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
安全检查与奖惩制度
2014/01/23 职场文书
销售辞职信范文
2015/03/02 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
初一语文教学反思
2016/03/03 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Django如何与Ajax交互
2021/04/29 Python
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技