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 相关文章推荐
Javascript中Eval函数的使用说明
Oct 11 Javascript
javascript中定义类的方法汇总
Dec 28 Javascript
JavaScript中的值类型转换介绍
Dec 31 Javascript
jquery实现增加删除行的方法
Feb 03 Javascript
ajax实现动态下拉框示例
Jan 10 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 jQuery
vue脚手架中配置Sass的方法
Jan 04 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 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
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python实现微信打飞机游戏
2020/03/24 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
Python urllib2运行过程原理解析
2020/06/04 Python
如何利用python读取micaps文件详解
2020/10/18 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
开放系统互连参考模型
2016/06/29 面试题
园林毕业生自我鉴定范文
2013/12/29 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
教学实验楼管理制度
2014/02/01 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
高中军训的心得体会
2014/09/01 职场文书
成绩报告单家长评语
2014/12/30 职场文书
综合素质评价自我评价
2015/03/06 职场文书
医院志愿者活动总结
2015/05/06 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python