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 判断控件获得焦点的示例代码
Mar 04 Javascript
JavaScript显示表单内元素数量的方法
Apr 02 Javascript
JavaScript实现彩虹文字效果的方法
Apr 16 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
Apr 03 Javascript
微信小程序之ES6与事项助手的功能实现
Nov 30 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
Nov 25 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
es6中reduce的基本使用方法
Sep 10 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 Javascript
JS使用正则表达式判断输入框失去焦点事件
Oct 16 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支持断点续传的源码
2010/05/16 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php析构函数的简单使用说明
2015/08/24 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
Cython 三分钟入门教程
2009/09/17 Python
python实现图片转字符小工具
2019/04/30 Python
简单了解django缓存方式及配置
2019/07/19 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
什么是lambda函数
2013/09/17 面试题
经理秘书岗位职责
2013/11/14 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
Python实现老照片修复之上色小技巧
2021/10/16 Python