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 相关文章推荐
基于JQuery的cookie插件
Apr 07 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
jquery中:input和input的区别分析
Jul 13 Javascript
向当前style sheet中插入一个新的style实现方法
Apr 01 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
Oct 24 Javascript
vue.js学习之递归组件
Dec 13 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 Javascript
BootstrapValidator实现表单验证功能
Nov 08 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
中英文字符串翻转函数
2008/12/09 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
js数组的基本使用总结
2021/01/18 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
全面分析Python的优点和缺点
2018/02/07 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
EJB实例的生命周期
2016/10/28 面试题
毕业生个人的求职信范文
2013/12/03 职场文书
加工操作管理制度
2014/01/19 职场文书
模具专业自荐信
2014/05/29 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
《日月潭》教学反思
2016/02/20 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS