国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

vue v-model動(dòng)態(tài)生成詳解

2019-11-19 13:35:20
字體:
供稿:網(wǎng)友

1.input 輸入框 v-model 綁定的字段名需要根據(jù)后臺(tái)返回的數(shù)據(jù)動(dòng)態(tài)生成,此時(shí)就不可以用 v-model綁定,而是用傳統(tǒng)的方法 value 動(dòng)態(tài)綁定,并且用子組件綁定向父組件傳遞值和事件。 代碼如下:

//子組件<template> <input v-if="type === 0" type="text" :value="currentValue" @change="handleInput"> <textarea v-else :value="currentValue" @change="handleInput"></textarea></template><script>export default {// 接收父組件傳遞過來的狀態(tài)(值) props: {  type: Number,  //0 input框 1 文本域  value: String  // 值有時(shí)候編輯狀態(tài)也是先要獲取值的 類似 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 動(dòng)態(tài)獲取過來的擴(kuò)展字段 需要綁定的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是動(dòng)態(tài)的,不可以寫死,只能在本地先定義一個(gè)json extendTypesModel,在獲取過來后臺(tái)的數(shù)據(jù)之后,本地賦值為空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}
//父組件注冊(cè)的事件handleUpdate(key, value) { this.extendTypesModel[key] = value}

父子組件通過自定義屬性和自定義事件實(shí)現(xiàn)通信。

父組件 自定義屬性 v-bind 將父的值傳給子

子組件通過 props 來接受 父的值,接受后 可以想data 一樣直接拿來使用。

子組件內(nèi)部 通過 $.emit( 父組件方法名,value) 方法向父組件傳值,父組件拿到值 并觸發(fā)父組件的事件了。

這種方式現(xiàn)在看來是個(gè)坑啊 因?yàn)樽咏M件對(duì)數(shù)據(jù)會(huì)有個(gè)緩存,每次不是新生成一個(gè) input框,而是看之前有沒有生成過,有的話就不生成了,所以數(shù)據(jù)有個(gè)緩存,清除不了 簡(jiǎn)直換個(gè)更簡(jiǎn)單的方式

<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給元素或者子組件注冊(cè)引用信息,綁定在this.ref綁值取值ref給元素或者子組件注冊(cè)引用信息,綁定在this.refs 上邊。如果是v-for 遍歷的話,綁定的就是個(gè)數(shù)組。

一般通過 $ref.name.value 來取值

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辛集市| 昌图县| 芒康县| 濉溪县| 滦南县| 施甸县| 沭阳县| 盐源县| 甘谷县| 青海省| 德兴市| 酒泉市| 宁国市| 扶沟县| 满洲里市| 黔江区| 钟祥市| 孝感市| 勃利县| 思茅市| 江都市| 呼玛县| 长垣县| 天全县| 通渭县| 巢湖市| 横山县| 兰州市| 定安县| 玛沁县| 丰镇市| 井陉县| 凭祥市| 安岳县| 宜丰县| 兰溪市| 新兴县| 寿光市| 钟山县| 高台县| 邵东县|