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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
js简单实现图片延迟加载的方法
Jul 19 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
Aug 25 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
bootstrapvalidator之API学习教程
Jun 29 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
Nov 23 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
js实现json数组分组合并操作示例
Feb 12 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 Javascript
uni-app使用countdown插件实现倒计时
Nov 01 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
Python实现搜索算法的实例代码
2020/01/02 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
制冷与电控专业应届生求职信
2013/11/11 职场文书
医院总经理职责
2013/12/26 职场文书
司法助理专业自荐书
2014/06/13 职场文书
公司活动总结怎么写
2014/06/25 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
机关职员工作检讨书
2014/10/23 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
加入学生会自荐书
2015/03/05 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
检讨书怎么写?
2019/06/21 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
Nginx的基本概念和原理
2022/03/21 Servers