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

vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決

 更新時間:2022年04月20日 14:34:04   作者:Vincent.TM  
這篇文章主要介紹了vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

屬性多層數(shù)組數(shù)據(jù)的添加修改

為什么需要使用Vue.set?

vue中不能檢測到數(shù)組的一些變化

比如一下兩種:

1、數(shù)組長度的變化 vm.arr.length = 100  

2、數(shù)組通過索引值修改內(nèi)容 vm.arr[1] = ‘aa’

那么為什么vue要做成這樣,不去監(jiān)聽數(shù)組的變化,數(shù)組在日常中使用頻率還是比較高的,這個問題其實(shí)尤大說過,是為了性能,假設(shè)我們新建了一個數(shù)組,長度是1000 但是只使用了前幾個 ,去實(shí)現(xiàn)頁面的響應(yīng)式監(jiān)聽,從數(shù)組改變到頁面輸出一共需要遍歷兩遍數(shù)組,會增加性能消耗,這可能就是不去監(jiān)聽某一項(xiàng)數(shù)組數(shù)據(jù)變化的原因吧。

以下是vue observer的的源碼,判斷是數(shù)組了,會停止對數(shù)據(jù)屬性的監(jiān)測。

所以vue提供了Vue.set 方法彌補(bǔ)這些不足,Vue.set同vm.$set(target,key,value):可以動態(tài)的給數(shù)組、對象添加和修改數(shù)據(jù),并更新視圖中數(shù)據(jù)的顯示。

vue在構(gòu)造函數(shù)new Vue()時,就通過Object.defineProperty中的getter和setter 這兩個方法,完成了對數(shù)據(jù)的綁定。

所以直接通過vm.arr[1] = ‘aa’的方法,無法修改值去觸發(fā)vue中視圖的更新,必須還得通過Object.defineProperty的方法去改變,而Vue.set()就封裝了js底層的Object.defineProperty方法。

所以我們需要利用Vue.set() 響應(yīng)式新增與修改數(shù)據(jù)。  

最近項(xiàng)目中使用到了樹形表格

即多層嵌套的數(shù)據(jù),類似于這樣的頁面展示。

數(shù)據(jù)結(jié)構(gòu)如下:

obj:[
        {
          id:'1',
          type:'1',
          children:[
            {
              id:'1-1',
              type:'1-1',
            }
          ]
        }
      ]

在每一層數(shù)據(jù)的數(shù)據(jù)量都比較大的時候,不能使用一次性加載所有數(shù)據(jù),需要優(yōu)化加載,點(diǎn)擊table的expand,即@expand-change方法獲取下一層數(shù)據(jù),那么就需要給下一層數(shù)據(jù)增加children屬性

那么我們肯定會想到一下幾種方法:

  • 第一種:
this.$set(this.obj[index],‘children',[…res.items])
  • 第二種:
this.obj[index].children = []
this.obj[index].children.splice(0,0,…res.items) //或者push方法
  • 第三種:

使用foreach方法,循環(huán)res.items使用 

this.$set(this.obj[index].children,index,res.items[index])

我使用了這幾種方法,甚至是組合使用了,但是結(jié)果不是很好,數(shù)據(jù)是增加上了,但是并沒有響應(yīng)式的增加上,頁面都沒有展示出相應(yīng)的數(shù)據(jù),查看結(jié)構(gòu)時,發(fā)現(xiàn)到第三層的時候,增加的children已經(jīng)沒有{ob:Observer},ob_: Observer是vue這個框架對數(shù)據(jù)設(shè)置的監(jiān)控器,有這個屬性,才能監(jiān)聽到數(shù)據(jù)的變化。

找了很久都不可以。最終嘗試了以下方法才得以解決:

//給第三層增加數(shù)據(jù)
this.$set(this.obj[level1Index].children[level2Index],'children',[])
//使用foreach 將數(shù)組的每一項(xiàng)添加為響應(yīng)式數(shù)據(jù)
res.items.forEach((item,index)=>{
	this.obj[level1Index].children[level2Index]
	this.$set(this.obj[level1Index].children[level2Index].children,index,item)
})

首先先添加children數(shù)組為響應(yīng)式,再去將數(shù)組中的每一項(xiàng)也添加為響應(yīng)式,頁面變可以正常顯示啦 。

向?qū)ο髷?shù)組中添加新屬性

this.rightMenuList.forEach(ele=>{
?? ??? ??? ??? ??? ?this.$set(ele, 'carInfo', data.carInfo)
?? ??? ??? ??? ?})
this.tableColums.forEach(res=>{
?? ??? ??? ??? ?this.$set(this.exportParams,res.id,"");
?? ??? ??? ?})

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue通過ref獲取不到$refs問題

    Vue通過ref獲取不到$refs問題

    這篇文章主要介紹了Vue通過ref獲取不到$refs問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue3中各種類型文件進(jìn)行預(yù)覽功能實(shí)例

    vue3中各種類型文件進(jìn)行預(yù)覽功能實(shí)例

    在vue移動端項(xiàng)目中經(jīng)常遇到這樣的需求,對一些上傳的附件可以點(diǎn)擊之后在線預(yù)覽,所以下面這篇文章主要給大家介紹了關(guān)于vue3中各種類型文件進(jìn)行預(yù)覽功能的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue項(xiàng)目中定時器無法清除的原因解決

    vue項(xiàng)目中定時器無法清除的原因解決

    頁面有定時器,并且定時器在離開頁面時,有清除,本文主要介紹了vue項(xiàng)目中定時器無法清除的原因解決,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 淺談Vue3 Composition API如何替換Vue Mixins

    淺談Vue3 Composition API如何替換Vue Mixins

    這篇文章主要介紹了淺談Vue3 Composition API如何替換Vue Mixins,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • vue組件之間通信實(shí)例總結(jié)(點(diǎn)贊功能)

    vue組件之間通信實(shí)例總結(jié)(點(diǎn)贊功能)

    這篇文章主要介紹了vue組件之間通信,結(jié)合實(shí)例形式分析了vue父子組件、兄弟組件之間通信的原理、實(shí)現(xiàn)方法,并給出了一個類似點(diǎn)贊功能的總結(jié)實(shí)例,需要的朋友可以參考下
    2018-12-12
  • vue實(shí)現(xiàn)一拉到底的滑動驗(yàn)證

    vue實(shí)現(xiàn)一拉到底的滑動驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了vue簡單的一拉到底的滑動驗(yàn)證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • vue實(shí)現(xiàn)商品購物車全選反選

    vue實(shí)現(xiàn)商品購物車全選反選

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)商品購物車全選反選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue中的面包屑導(dǎo)航組件實(shí)例代碼

    vue中的面包屑導(dǎo)航組件實(shí)例代碼

    這篇文章主要介紹了vue的面包屑導(dǎo)航組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • vue集成chart.js的實(shí)現(xiàn)方法

    vue集成chart.js的實(shí)現(xiàn)方法

    這篇文章主要介紹了vue集成chartjs的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vuex實(shí)現(xiàn)登錄狀態(tài)的存儲,未登錄狀態(tài)不允許瀏覽的方法

    vuex實(shí)現(xiàn)登錄狀態(tài)的存儲,未登錄狀態(tài)不允許瀏覽的方法

    下面小編就為大家分享一篇vuex實(shí)現(xiàn)登錄狀態(tài)的存儲,未登錄狀態(tài)不允許瀏覽的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論

红河县| 麻江县| 张掖市| 孝义市| 阿巴嘎旗| 白河县| 杂多县| 蒙自县| 东明县| 瑞丽市| 轮台县| 龙胜| 西乌珠穆沁旗| 天长市| 安泽县| 湄潭县| 靖江市| 依安县| 南江县| 庄河市| 措勤县| 沙坪坝区| 政和县| 轮台县| 肥东县| 淮南市| 会理县| 迁安市| 郁南县| 浦城县| 龙里县| 云林县| 娱乐| 泰顺县| 台山市| 南岸区| 穆棱市| 永平县| 扎囊县| 五峰| 保定市|