最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iview-table組件嵌套input?select數(shù)據(jù)無(wú)法雙向綁定解決

 更新時(shí)間:2022年09月13日 09:50:33   作者:做什么夢(mèng)呢  
這篇文章主要為大家介紹了iview-table組件嵌套input?select數(shù)據(jù)無(wú)法雙向綁定解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、前言

本篇主要介紹關(guān)于iview-ui組件庫(kù)中的table表格組件嵌套input組件,數(shù)據(jù)無(wú)法及時(shí)更新問題的解決辦法。

二、問題描述

在我們開發(fā)的過程中,經(jīng)常會(huì)遇到需要在表格內(nèi)操作數(shù)據(jù)的情況,但是在vue2中,雙向綁定的值必須是在data中聲明的變量,然而我們?cè)趖able中展示的每一行數(shù)據(jù),通常都是使用的scope中的row去獲取的當(dāng)前行數(shù)據(jù),但是row卻并沒有在data中聲明,這樣就出現(xiàn)了,無(wú)法實(shí)現(xiàn)數(shù)據(jù)的雙向綁定。

三、解決辦法

因?yàn)樵谑褂脠?chǎng)景中,有時(shí)候我們用的一維的表格,還有一種就是樹狀結(jié)構(gòu)的表格,所以這里我們分兩種情況說(shuō)。

1.基礎(chǔ)數(shù)據(jù)表格

第一種就是一維數(shù)組的基礎(chǔ)型數(shù)據(jù)的table展示。如下圖

這種情況,為了實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,我們可以這么做,代碼如下

<template>
    <Table :columns="columns" :data="tableData">
        <template #name="{ row, index }">
          <Input v-model="tableData[index].name" />
        </template>
        <template #desc="{ row, index }">
          <Input v-model="tableData[index].desc" />
        </template>
        <template #action="{ row, index }">
          <Button type="text">刪除</Button>
        </template>
    </Table>
</template>
export default {
    data () {
        return {
            tableData: []
            columns: [
                {
                  type: 'index',
                  title: '序號(hào)',
                  width: 80,
                  align: 'center'
                },
                {
                  title: '參數(shù)名稱',
                  slot: 'name'
                },
                {
                  title: '參數(shù)描述',
                  slot: 'desc'
                },
                {
                  title: '操作',
                  slot: 'action',
                  width: 120
                }
            ]
        }
    }
}

這種基礎(chǔ)型數(shù)據(jù)結(jié)構(gòu)的表格,我們就可以直接利用tableData[index]來(lái)替代row,因?yàn)?code>tableData在data中聲明了,所以這時(shí)候,input上綁定的數(shù)據(jù),是可以實(shí)現(xiàn)雙向綁定的。

2.樹形數(shù)據(jù)表格

第二種樹形結(jié)構(gòu)的數(shù)據(jù)表格,展示情況如下圖所示

這種情況,我們就不能用上面的方法了,因?yàn)槲覀儾荒芡ㄟ^index去獲取更多維深度的數(shù)據(jù)了,因此這里我們可以通過事件監(jiān)聽的方式,去查詢當(dāng)前改變數(shù)據(jù)是哪個(gè),利用樹型數(shù)據(jù)的唯一_key值,去這個(gè)綁定數(shù)組tabelData中修改對(duì)應(yīng)的值,代碼如下

<template>
    <Table row-key="_key" :columns="columns" :data="tableData">
      <template #label="{ row }">
        <Input v-model="row.label" @on-change="updateTableData(row, 'label')" />
      </template>
      <template #componentName="{ row }">
        <Select v-model="row.componentName" transfer @on-change="updateTableData(row, 'componentName')">
          <Option v-for="item in componentList" :value="item.value" :key="item.value">{{ item.label }}</Option>
        </Select>
      </template>
      <template #required="{ row }">
        <Checkbox v-model="row.required" @on-change="updateTableData(row, 'required')" />
      </template>
      <template #hidden="{ row }">
        <Checkbox v-model="row.hidden" @on-change="updateTableData(row, 'hidden')" />
      </template>
      <template #defaultValue="{ row }">
        <Input v-model="row.defaultValue" @on-change="updateTableData(row, 'defaultValue')" />
      </template>
    </Table>
</template>
export default {
    data () {
        return {
            tableData: [],
            componentList: [
                {
                  value: 'TextField',
                  label: '文本組件'
                }
            ],
            columns: [
                {
                  title: '字段名稱',
                  key: 'name',
                  tree: true
                },
                {
                  title: '顯示名稱',
                  slot: 'label',
                },
                {
                  title: '字段類型',
                  slot: 'componentName'
                },
                {
                  title: '必填',
                  slot: 'required',
                  width: 60
                },
                {
                  title: '隱藏',
                  slot: 'hidden',
                  width: 60
                },
                {
                  title: '默認(rèn)值 ',
                  slot: 'defaultValue'
                }
            ]
        }
    },
    methods: {
        // 找到對(duì)應(yīng)值遞歸---手動(dòng)更新
        repeatDoit (list, row , key) {
          list.forEach(item => {
              if (item._key === row._key) {
                item[key] = row[key]
              } else {
                if (item.children && item.children.length) {
                  this.repeatDoit(item.children, row , key)
                }
              }
          })
        },
        // 手動(dòng)更新表格中的數(shù)據(jù)==body
        updateTableData (row, key) {
          this.repeatDoit(this.tableData, row, key)
          console.log('this.tableData ====', this.tableData)
        }
    }
}

這里我們通過監(jiān)聽表單組件的事件,然后通過樹形結(jié)構(gòu)的唯一_key值,去修改data中聲明tableData數(shù)組變量,從而實(shí)現(xiàn)數(shù)據(jù)的更新。

四、后記

以上我們就實(shí)現(xiàn)了解決iview-table組件嵌套input、select數(shù)據(jù)無(wú)法雙向綁定問題。另外還有一種解決方法,是使用render去構(gòu)造表格,我不太喜歡那種寫法,所以這里就不說(shuō)了,更多關(guān)于iview table數(shù)據(jù)雙向綁定的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue常見路由跳轉(zhuǎn)的幾種方式小結(jié)

    vue常見路由跳轉(zhuǎn)的幾種方式小結(jié)

    本文主要介紹了常見路由跳轉(zhuǎn)的幾種方式,主要介紹了四種常見方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 一文帶你了解什么是Vue?Vapor

    一文帶你了解什么是Vue?Vapor

    隨著Svelte和SolidJS的流行,無(wú)虛擬DOM模式逐漸開始火了起來(lái),Vue?Vapor就是一個(gè)無(wú)虛擬DOM模式版本的vue,下面就跟隨小編一起來(lái)深入了解一下Vue?Vapor吧
    2024-11-11
  • 關(guān)于el-tooltip使用\n換行的情況顯示

    關(guān)于el-tooltip使用\n換行的情況顯示

    這篇文章主要介紹了關(guān)于el-tooltip使用\n換行的情況顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • vue中sync語(yǔ)法糖的用法詳解

    vue中sync語(yǔ)法糖的用法詳解

    Vue的.sync語(yǔ)法糖是一個(gè)用于雙向數(shù)據(jù)綁定的指令,可以在子組件中用來(lái)監(jiān)聽父組件傳遞下來(lái)的props的變化,本文給大家介紹了在Vue中,.sync語(yǔ)法糖的使用方法,感興趣的朋友跟著小編一起來(lái)學(xué)習(xí)吧
    2024-01-01
  • 基于vue3?vue-cli4?線上部署及優(yōu)化的問題

    基于vue3?vue-cli4?線上部署及優(yōu)化的問題

    這篇文章主要介紹了基于vue3?vue-cli4?線上部署及優(yōu)化的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 探究Vue.js 2.0新增的虛擬DOM

    探究Vue.js 2.0新增的虛擬DOM

    vue.js 2.0大家對(duì)此并不陌生吧。最令人興奮的是更新頁(yè)面的"虛擬DOM"的加入。那么對(duì)于虛擬 DOM 可以做什么呢?今天小編通過本文給大家解答下
    2016-10-10
  • Vue3中的createGlobalState用法及示例詳解

    Vue3中的createGlobalState用法及示例詳解

    createGlobalState 是 Vue 3 中一種管理全局狀態(tài)的簡(jiǎn)便方式,通常用于管理多個(gè)組件間共享的狀態(tài),由 @vueuse/core 提供的,允許創(chuàng)建一個(gè)響應(yīng)式的全局狀態(tài),本文給大家介紹了Vue3中的createGlobalState用法及示例,需要的朋友可以參考下
    2024-10-10
  • Vue讀取本地靜態(tài)文件json的2種方法以及優(yōu)缺點(diǎn)

    Vue讀取本地靜態(tài)文件json的2種方法以及優(yōu)缺點(diǎn)

    這篇文章主要介紹了Vue讀取本地靜態(tài)文件json的2種方法以及優(yōu)缺點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue實(shí)現(xiàn)主題切換的多種思路分享

    vue實(shí)現(xiàn)主題切換的多種思路分享

    最近一段時(shí)間,一直在做主題方面的工作。我們的主題,并不是簡(jiǎn)單切換一下顏色,或者排版變化這些,而是變化比較大的主題。比如說(shuō):主題1和主題2看起來(lái)完全不一樣,功能甚至都不一樣。這樣,通過切換css就無(wú)法做到了,因此我思考良久,使用了如下2種方法
    2021-06-06
  • Vue3的7種種組件通信詳情

    Vue3的7種種組件通信詳情

    Vue3兼容大部分Vue2的特性,用Vue2代碼開發(fā)Vue3都可以,性能上面打包大小減少 41%,初次渲染快 55%,更新快 133%,內(nèi)存使用減少 54%,本篇文章主要介紹Vue3的7種種組件通信,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09

最新評(píng)論

贞丰县| 博罗县| 德令哈市| 临西县| 师宗县| 依安县| 平凉市| 浦江县| 咸丰县| 南岸区| 临西县| 富蕴县| 云阳县| 白玉县| 安西县| 虞城县| 永城市| 临西县| 修文县| 延长县| 红河县| 察哈| 林西县| 通河县| 二连浩特市| 贵溪市| 分宜县| 新田县| 蓝山县| 河西区| 观塘区| 田林县| 九江县| 柳州市| 江西省| 翼城县| 栾城县| 吴旗县| 邯郸市| 苍溪县| 五常市|