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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
div移动 输入框不能输入的问题
Nov 19 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
May 11 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
微信小程序使用wxParse解析html的方法教程
Jul 06 Javascript
解决layui表格内文本超出隐藏的问题
Sep 12 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 Javascript
Vue axios 将传递的json数据转为form data的例子
Oct 29 Javascript
JavaScript仿京东秒杀倒计时
Mar 17 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
js表头排序实现方法
2015/01/16 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
微信小程序日历效果
2018/12/29 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
vue页面更新patch的实现示例
2020/03/25 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
python计算最大优先级队列实例
2013/12/18 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
详解Python字典小结
2018/10/20 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Flask-WTF表单的使用方法
2019/07/12 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
翻译专业应届生求职信
2013/11/23 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2014年公司工作总结
2014/11/22 职场文书
企业投资意向书
2015/05/09 职场文书
余世维讲座观后感
2015/06/11 职场文书