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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
JavaScript面向对象之静态与非静态类
Feb 03 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
Nov 18 Javascript
基于js中this和event 的区别(详解)
Oct 24 Javascript
基于 Vue 实现一个酷炫的 menu插件
Nov 14 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
使用Node.js实现一个多人游戏服务器引擎
Mar 13 Javascript
JavaScript实现消消乐的源代码
Jan 12 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
php格式化日期实例分析
2014/11/12 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python根据日期返回星期几的方法
2015/07/06 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python中字符串List按照长度排序
2019/07/01 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
CSS3简单实现照片墙
2014/12/12 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
委托公证书格式
2015/01/26 职场文书
2015年女工委工作总结
2015/07/27 职场文书
python urllib库的使用详解
2021/04/13 Python
Golang表示枚举类型的详细讲解
2021/09/04 Golang
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL