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 相关文章推荐
清除div下面的所有标签的方法
Feb 17 Javascript
document.addEventListener使用介绍
Mar 07 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
May 10 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
javascript委托(Delegate)blur和focus用法实例分析
May 26 Javascript
利用ES6语法重构React组件详解
Mar 02 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
JS实现碰撞检测的方法分析
Jan 19 Javascript
jQuery.parseJSON()函数详解
Feb 28 jQuery
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
May 21 Javascript
vue element upload实现图片本地预览
Aug 20 Javascript
vue 子组件修改data或调用操作
Aug 07 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
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
js继承的实现代码
2010/08/05 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python中input与raw_input 之间的比较
2017/08/20 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python 解压pkl文件的方法
2018/10/25 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
linux 下selenium chrome使用详解
2020/04/02 Python
如何卸载python插件
2020/07/08 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
python regex库实例用法总结
2021/01/03 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
党员个人思想汇报
2013/12/28 职场文书
股份合作协议书范本
2014/04/14 职场文书
协会周年庆活动方案
2014/08/26 职场文书
护理见习报告范文
2014/11/03 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
详解python的内存分配机制
2021/05/10 Python