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 相关文章推荐
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
JavaScript驾驭网页-DOM
Mar 24 Javascript
利用AngularJs实现京东首页轮播图效果
Sep 08 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
May 05 Javascript
JavaScript实现三级联动效果
Jul 15 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
vue项目前端埋点的实现
Mar 06 Javascript
Vue数据绑定实例写法
Aug 06 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
重定向实现代码
2006/11/20 Javascript
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
js中遍历Map对象的方法
2016/07/27 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python Pygame的具体使用讲解
2017/11/03 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
python3实现点餐系统
2019/01/24 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
商业活动邀请函
2014/02/04 职场文书
社区母亲节活动总结
2015/02/10 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
工作服管理制度范本
2015/08/06 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python