vue 2.0组件与v-model详解


Posted in Javascript onMarch 27, 2017

前言

大家可能乍一看这个标题,可能会有疑问:v-model和组件也能扯到一起?在打算写这篇文章的时候,也是这么想的。咱们按简历的那一套STAR法则来梳理一下这篇文章:

情景【Situation】:

编写通用的输入组件时,子组件要绑定到父组件的某个变量上dataA,当父组件要拿到自组件的值时不能通过this.$children.xxx取值然后付给dataA,

而是父组件可以直接this.dataA就可以取到当前子组件最新值。

任务【Task】:

实现在父组件直接this.dataA就可以取到当前子组件最新值。

行动【Action】:

首先要了解v-model这个指令,许多认真阅读过完整vue文档的同学可能已经知道了关于v-model。

v-model官方给出的说发是:这其实是一个简写的形式,v-model实际执行的是下面的绑定:

<input type="text" v-bind:value="dataA" v-on:input="dataA = $event.target.value" />

v-model是动态绑定值到value,然后监听input的inpit事件获取值后赋给dataA的一个过程。

在说一下input的value属性,在组件内部要定义一个value的props属性,以便能够动态绑定上父组件传过来的值;

组件内部还要做一件事情:

动态计算(获取和设置)currentValue的值,用到了vue的对象的get和set函数;

讲到这里,我们就可以解决上面的问题了;

首先定义一个通用输入组件:

Vue.component('my-component',{
 template:'<div><input type="text" type="text" v-model="currentValue"/></div>',
 data:function(){
 return {
  // 双向绑定值-必须
  currentValue:this.value
 }
 },
 props:['value'],// 设置value为props属性-必须
 computed:{
 currentValue: {
  // 动态计算currentValue的值
  get:function() {
  return this.value;
  },
  set:function(val) {
  this.$emit('input', val);
  }
 }
 }
})

在Html里绑定到vue实例的一个字段上;

<div id="demo_01">
 <my-component v-for="(val,key) in postData" v-model="postData[key]"></my-component>
 <button @click="showValue">打印对象值</button>
 </div>

实例里写一个方法

打印一下我们绑定的值;

var demo_01 = new Vue({
 el:'#demo_01',
 data:{
 postData:{
  name:'李雷',
  age:'80',
  describ:'这是一个传奇的人物'
 }
 },
 methods:{
 showValue:function(){
  console.log(this.postData)
 }
 }
});

是不是以后就不用繁琐冗长的this.$children.xxx取值方式了?

结果【Result】:

提供了有效的解决了关于输入类组件取值方案,并且已经部署实施。

总结

以上就是关于vue2.0 组件和v-model的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的帮助。

Javascript 相关文章推荐
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
Jan 20 Javascript
原生js编写autoComplete插件
Apr 13 Javascript
Bootstrap所支持的表单控件实例详解
May 16 Javascript
jQuery基础知识点总结(DOM操作)
Jun 01 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
js实现图片上传并预览功能
Aug 06 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 Javascript
JavaScript无缝滚动效果的实例代码
Mar 27 #Javascript
JS数组搜索之折半搜索实现方法分析
Mar 27 #Javascript
javascript实现下雨效果
Mar 27 #Javascript
HTML的select控件美化
Mar 27 #Javascript
JS实现的点击表头排序功能示例
Mar 27 #Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 #Javascript
vue2.0实战之基础入门(1)
Mar 27 #Javascript
You might like
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP查询网站的PR值
2013/10/30 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
javascript Keycode对照表
2009/10/24 Javascript
JavaScript的eval JSON object问题
2009/11/15 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
pandas重新生成索引的方法
2018/11/06 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
pandas的相关系数与协方差实例
2019/12/27 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
安全生产检查通报
2014/01/29 职场文书
暑期社会实践感言
2014/02/25 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
入党函调证明材料
2015/06/19 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL