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 相关文章推荐
document.execCommand()的用法小结
Jan 08 Javascript
javascript:window.open弹出窗口的位置问题
Mar 18 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
Jul 12 Javascript
jQuery的ajax和遍历数组json实例代码
Aug 01 Javascript
Bootstrap栅格系统的使用和理解2
Dec 14 Javascript
Angular使用Md5加密的解决方法
Sep 16 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 Javascript
js实现文件上传功能 后台使用MultipartFile
Sep 08 Javascript
详解vantUI框架在vue项目中的应用踩坑
Dec 06 Javascript
使用JS判断页面是首次被加载还是刷新
May 26 Javascript
通过滑动翻页效果实现和移动端click事件问题
Jan 26 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 日期时间处理函数小结
2009/12/18 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
微信小程序  生命周期详解
2016/10/27 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
Python MD5文件生成码
2009/01/12 Python
python实现dict版图遍历示例
2014/02/19 Python
python调用windows api锁定计算机示例
2014/04/17 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python实现注册、登录小程序功能
2018/09/21 Python
python print出共轭复数的方法详解
2019/06/25 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
python Shapely使用指南详解
2020/02/18 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
物业公司的岗位任命书
2014/06/06 职场文书
企业文化理念标语
2014/06/10 职场文书
法定代表人身份证明书
2014/09/10 职场文书
赡养老人协议书范本
2015/08/06 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
Apache POI的基本使用详解
2021/11/07 Servers
MySQL的存储过程和相关函数
2022/04/26 MySQL