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 相关文章推荐
正则表达式语法
Oct 09 Javascript
用JavaScript脚本实现Web页面信息交互
Dec 21 Javascript
JavaScript中void(0)的具体含义解释
Feb 27 Javascript
javascript DOM编程实例(智播客学习)
Nov 23 Javascript
php gethostbyname获取域名ip地址函数详解
Jan 24 Javascript
jQuery编写widget的一些技巧分享
Oct 28 Javascript
jquery复选框checkbox实现删除前判断
Apr 20 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
Sep 02 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
jquery动态添加带有样式的HTML标签元素方法
Feb 24 jQuery
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 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中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
基于PHP文件操作的详解
2013/06/05 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
php查看当前Session的ID实例
2015/03/16 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
PHP编写RESTful接口
2016/02/23 PHP
php简单统计中文个数的方法
2016/09/30 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
2014年党务公开实施方案
2014/02/27 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
2015年专项整治工作总结
2015/04/03 职场文书