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与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
浅说js变量
May 25 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
Apr 28 Javascript
浅析JS中常用类型转换及运算符表达式
Jul 23 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
vue组件之间通信方式实例总结【8种方式】
Feb 22 Javascript
详解VS Code使用之Vue工程配置format代码格式化
Mar 20 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
Mar 22 Javascript
详解小程序如何动态绑定点击的执行方法
Nov 26 Javascript
Vuex的API文档说明详解
Feb 05 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的mysqli_select_db()函数讲解
2019/01/23 PHP
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
python集合用法实例分析
2015/05/30 Python
python中list常用操作实例详解
2015/06/03 Python
python处理html转义字符的方法详解
2016/07/01 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python实现括号匹配的思路详解
2018/08/23 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
浅析Python 多行匹配模式
2020/07/24 Python
Python 多进程原理及实现
2020/12/21 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
入党思想汇报怎么写
2014/04/03 职场文书
关于青春的演讲稿
2014/05/05 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书