vue v-model动态生成详解


Posted in Javascript onJune 30, 2018

1.input 输入框 v-model 绑定的字段名需要根据后台返回的数据动态生成,此时就不可以用 v-model绑定,而是用传统的方法 value 动态绑定,并且用子组件绑定向父组件传递值和事件。 代码如下:

//子组件
<template>
 <input v-if="type === 0" type="text" :value="currentValue" @change="handleInput">
 <textarea v-else :value="currentValue" @change="handleInput"></textarea>
</template>

<script>
export default {
// 接收父组件传递过来的状态(值)
 props: {
  type: Number,  //0 input框 1 文本域
  value: String  // 值有时候编辑状态也是先要获取值的 类似 v-model
 },
 data() {
  return {
   currentValue: this.value
  }
 },
 methods: {
  handleInput(e) {
   let value = e.target.value
   if (value === this.currentValue) {
    return
   } else {
    this.currentValue = value
   }
   this.$emit('input', value)
  }
 }
}
</script>
//父组件
//extendTypes 动态获取过来的扩展字段 需要绑定的model 为item.extendKey

<div class="form-group" v-for="item in extendTypes">
  <div>
   <ad-input :value="extendTypesModel[item.extendKey]" :type="item.type" @input="handleUpdate(item.extendKey, $event)">
   </ad-input>
  </div>
</div>
// model是动态的,不可以写死,只能在本地先定义一个json extendTypesModel,在获取过来后台的数据之后,本地赋值为空
this.extendTypesModel = {}
if (res && res.code === 0) {
  for (let i = 0; i < res.data.length; i++) {
  this.extendTypesModel[res.data[i].extendKey] = ''
}
  this.extendTypes = res.data
}
//父组件注册的事件
handleUpdate(key, value) {
 this.extendTypesModel[key] = value
}

父子组件通过自定义属性和自定义事件实现通信。

父组件 自定义属性 v-bind 将父的值传给子

子组件通过 props 来接受 父的值,接受后 可以想data 一样直接拿来使用。

子组件内部 通过 $.emit( 父组件方法名,value) 方法向父组件传值,父组件拿到值 并触发父组件的事件了。

这种方式现在看来是个坑啊 因为子组件对数据会有个缓存,每次不是新生成一个 input框,而是看之前有没有生成过,有的话就不生成了,所以数据有个缓存,清除不了 简直换个更简单的方式

<div class="form-group" v-for="(item, index) in extendTypes">
  <label class="control-label">{{item.extendName}}</label>

  // 既不需要用v-model绑定 也不需要用到子组件 将赋值和取值分开来 而不是用 v-model去绑定,这里取值用到 ref

    <input class="form-control" :value="extendTypesModel[item.extendKey]" @input="handleUpdate(item.extendKey, index)" ref="ipt">
   </div>
   <div class="text-danger" v-if="item.isRequired === 1">*</div>
</div>
handleUpdate(key, index) {
  this.extendTypesModel[key] = this.$refs.ipt[index].value
}

ref绑值取值ref给元素或者子组件注册引用信息,绑定在this.ref绑值取值ref给元素或者子组件注册引用信息,绑定在this.refs 上边。如果是v-for 遍历的话,绑定的就是个数组。

一般通过 $ref.name.value 来取值

Javascript 相关文章推荐
javascript引用对象的方法代码
Aug 13 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
Js 回车换行处理的办法及replace方法应用
Jan 24 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
Jun 29 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
vue父组件中获取子组件中的数据(实例讲解)
Sep 27 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
基于javascript实现日历功能原理及代码实例
May 07 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 #Javascript
Vue项目中添加锁屏功能实现思路
Jun 29 #Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 #Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 #Javascript
详解基于Vue-cli搭建的项目如何和后台交互
Jun 29 #Javascript
jQuery实现模糊搜索功能的方法分析
Jun 29 #jQuery
微信小程序中进行地图导航功能的实现方法
Jun 29 #Javascript
You might like
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
php数组键值用法实例分析
2015/02/27 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python 获取div标签中的文字实例
2018/12/20 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
Python any()函数的使用方法
2019/10/28 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
旅游管理毕业生自荐信
2013/11/05 职场文书
护士的岗位职责
2013/12/04 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
2015新年寄语大全
2014/12/08 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书