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 学习笔记(十六) js事件
Feb 01 Javascript
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
关于Javascript与iframe的那些事儿
Jul 04 Javascript
jquery放大镜效果超漂亮噢
Nov 15 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
jQuery实用技巧必备(中)
Nov 03 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
Feb 14 Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 jQuery
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下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP修改session_id示例代码
2014/01/08 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
PHP微信红包API接口
2015/12/05 PHP
php实现学生管理系统
2020/03/21 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
js微信分享API
2020/10/11 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
p5.js绘制旋转的正方形
2019/10/23 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
个人自我评价范文
2014/02/05 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
运动会加油稿50字
2015/07/21 职场文书