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 相关文章推荐
js 加载时自动调整图片大小
May 28 Javascript
js操作ajax返回的json的注意问题!
Feb 23 Javascript
火狐下input焦点无法重复获取问题的解决方法
Jun 16 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
Oct 25 Javascript
基于原生JS实现图片裁剪
Aug 01 Javascript
Js获取当前日期时间及格式化代码
Sep 17 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
Jan 27 Javascript
JQuery中queue方法用法示例
Jan 31 jQuery
js微信分享接口调用详解
Jul 23 Javascript
js模拟F11页面全屏显示
Sep 17 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 Javascript
JavaScript点击按钮生成4位随机验证码
Jan 28 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里面的抽象类
2010/01/28 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
一道python走迷宫算法题
2018/01/22 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
python实现关键词提取的示例讲解
2018/04/28 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
深入浅析python的第三方库pandas
2020/02/13 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
PyTorch的torch.cat用法
2020/06/28 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
医科大学生的自我评价
2013/12/04 职场文书
三年级学生评语
2014/04/23 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
逃课检讨书
2015/01/26 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
MySQL 开窗函数
2022/02/15 MySQL
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers