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 写类方式之十
Jul 05 Javascript
Jquery:ajax实现翻页无刷新功能代码
Aug 05 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
JS小数运算出现多为小数问题的解决方法
Jun 02 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
JQuery.validationEngine表单验证插件(推荐)
Dec 10 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
Jul 11 Javascript
vue 实现单选框设置默认选中值
Nov 07 Javascript
js模拟实现百度搜索
Jun 28 Javascript
JS访问对象两种方式区别解析
Aug 29 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和MySql中计算时间差的方法
2011/04/22 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
js中this对象用法分析
2018/01/05 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Django实现网页分页功能
2019/10/31 Python
如何一键升级Python所有包
2020/11/05 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
毕业生求职简历的自我评价
2013/10/07 职场文书
数据管理员的自我评价分享
2013/11/15 职场文书
销售个人求职信范文
2014/04/28 职场文书
见习报告格式要求
2014/11/04 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
600字作文之感受大自然
2019/11/27 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
JS的深浅复制详细
2021/10/16 Javascript
python playwrigh框架入门安装使用
2022/07/23 Python