vue 監聽map數組變化_解決vue無法偵聽數組及對象屬性的變化問題

一、數組

1、可以監聽到的情況

如push、splice、=賦值(array=[1,2,3])

2、無法監聽到的情況

使用下標修改某個元素(這種比較常見)

array[index] = 1

object.a = 3

直接修改數組length

array.length = 5

3、解決方案

this.$set(array, index, data) - 這是個深度的修改,某些情況下可能導致你不希望的結果,因此最好還是慎用

this.dataArr = this.originArr

this.$set(this.dataArr, 0, {data: '修改第一個元素'})

console.log(this.dataArr)

console.log(this.originArr) //同樣的 源數組也會被修改 在某些情況下會導致你不希望的結果

上面提到的splice方法進行增刪改

利用臨時變量進行中轉

let tempArr = [...this.targetArr]

tempArr[0] = {data: 'test'}

this.targetArr = tempArr

二、對象

對象和數組都是js里的引用類型,在實際存儲中,數據是存儲在堆中的,利用存儲在棧里的對象名或者數組名的指針進行索引,因此也存在在淺拷貝和深拷貝以及等號賦值時,到底是僅僅新建了一個指針指向了同一份數據,還是兩個指針分別指向了兩份完全一樣的數據的問題

1、可以監聽到的

對象的直接=賦值

this.obj = {name: 'test'}

2、無法監聽到的

對象屬性的增刪改

obj: {

prop1: 'data1',

prop2: 'data2'

}

...

// 增

this.obj.prop3 = 'data3'

// 刪

delete this.obj.prop1

// 改

this.obj.prop1 = 'data4'

3、解決辦法

this.$set(obj, key ,value) - 可實現增、改

watch時添加deep:true深度監聽,只能監聽到屬性值的變化,新增、刪除屬性無法監聽

this.$watch('blog', this.getCatalog, {

deep: true

// immediate: true // 是否第一次觸發

});

watch時直接監聽某個key

watch: {

'obj.name'(curVal, oldVal) {

// TODO

}

}

object.assign()+直接=賦值

this.watchObj = Object.assign({}, this.watchObj, {

name: 'xiaoyue',

age: 15,

});

補充知識:vue 監聽不到數組或對象值的變化怎么辦

一、vue監聽數組的變化

vue能購監聽到數組變化的場景

通過賦值的形式改變正在被監聽的數組;

通過splice(index, num, val) 的形式改變正在被監聽的數組;

通過數組的push的形式改變正在被監聽的數組。

vue無法監聽數組變化的場景

通過數組索引改變數組元素的值;

改變數組的長度;

vue無法監聽數組變化的場景

this.$set(arr, index, newVal);

通過splice(index,num,val);

使用臨時變量作為中轉,重新賦值數組;

二、vue監聽對象的變化

vue能夠監聽到對象變化的場景

通過直接賦值的場景。

eg:watchObj = {name:“zyk”}

vue無法監聽到對象變化的場景

對象的增加、刪除、修改無法被vue監聽到

vue解決無法監聽對象變化的方法

使用 this.$set(object, key, value)(vue 無法監聽 this.set 修改原有屬性)

使用Object.assign(),直接賦值的原理;(推薦使用)

以上這篇解決vue無法偵聽數組及對象屬性的變化問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538631.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538631.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538631.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

哈維瑪德學院 計算機,這些美國大學名氣不高,卻有最頂級的工程專業

上一期我們盤點了有博士學位的Top50 大學工程專業排名今天我們繼續盤點 2018USNEWS 工程專業排名不過這個排名主要針對的是沒有博士學位的 Top50 大學和上一期那些大名鼎鼎的大學相比這里面很多大學并不怎么為人熟知因為這個榜單大部分都是區域性大學事實上,工程專業…

Hbase介紹

1、為什么出現hbase?hadoop 的NameNode適合大文件,不適合小文件。HDFS不適合大量小文件的存儲,因namenode將文件系統的元數據存放在內存中,因此存儲的文件數目受限于 namenode的內存大小。HDFS中每個文件、目錄、數據塊占用150Byt…

math 向上取整_自我說明:關于Math和File類的具體說明.

Math類:Math類,不允許有子類,它直接繼承于object.Math類包含執行基本數字運算的方法.如基本指數,對數,平方根和三角函數.Math的基本方法:System.out.pintln(“1.絕對值:”Math.abs(16)”t”Math.abs(-16)”…

眼圖 非差分線_LVDS低電壓差分信號簡介

LVDS低電壓差分信號簡介1. 名詞解釋1.1. 背景隨著數據傳輸速率越來越高,現在計算機系統中的數據傳輸接口基本上都串行化了,像USB、PCIe、SATA、DP等等外部總線將并行總線擠壓到只剩下內存總線這個最后的堡壘。當然,就算是并行傳輸總線最后的倔…

無內存在優盤可以啟動計算機嗎,沒有U盤不要緊,內存卡做啟動盤裝Win7方法

現在最流行的win7系統安裝方法大多以U盤來安裝,那么如果你沒有U盤呢?為了安裝個Win7系統是不是要去買個U盤?當然不用,如果你還有空閑不用的手機內存卡,那么也是可以制作U盤啟動盤來安裝Win7系統的。準備工具&#xff1…

微信小程序request請求動態獲取數據

微信小程序開發文檔鏈接 1 后臺代碼: clickButton:function(){var that this;wx.request({url: http://localhost:9096/admin.php/index/jj,method : POST,header: { content-type: application/x-www-form-urlencoded },data : {},success: function (res) {//console.log(re…

HBase中的HMaster、HRegionServer、Zookeeper

原文鏈接:http://blog.csdn.net/mm_bit/article/details/51304233 ----------------------------------- HMaster是Hbase主/從集群架構中的中央節點。通常一個HBase集群存在多個HMaster節點,其中一個為Active Master,其余為Backup Master. Hbase每時每刻只有一個hm…

spyder python調試_使用spyder編譯器單步調試python

1、將需要進行單步調試的函數在腳本中進行調用(十分重要的一步)。由于python是解釋型語言,在進行單步調試的時候需要告訴系統你使用了這個函數,單步調試才會進入你所需要調式的函數。如下圖所示,我們定義了createDataS…

label qt 自動換行_QT編寫一個登錄界面

前言繼上篇:一起學Qt之基礎篇---入門今天上手實操用QT編寫一個登錄界面~系統權限這個詞大家肯定不陌生,你進入一個網站也是,如果不登錄,就是以游客的身份進去的,要想看到某些信息肯定需要進行登錄,更完善的…

我的世界服務器怎么修改書與筆,我的世界書與筆怎么做 我的世界書與筆怎么用...

第一步先收集甘蔗,然后合成紙,甘蔗在河邊,池塘邊,沼澤地一般都會生成,我們也可以拿回家種植,但是甘蔗必須種在水邊,其他地方種植不了,其他地方玩家怎么右鍵甘蔗都是沒有反應的。第二…

python csv模塊用法_python使用csv模塊如何將數據存放在一張表的不同行?

def save2csv(file_nameNone, headerNone, dataNone): """ 保存成CSV格式文件,方便Excel直接打開 :param file_name: 保存的文件名 :param header: 表頭,每一列的名字 :param data: 具體填充數據 :return: """ if file_name is None or isinstan…

虛擬機 服務器 root,虛擬機切換到root賬戶

虛擬機切換到root賬戶 內容精選換一換一、安裝虛擬機1、下載VMware workstation 14 ,安裝時按照默認配置安裝2、下載ubuntu-18.04.1-desktop-amd64.iso鏡像文件3、打開 VMware workstation ,新建虛擬機4、配置虛擬機內存,磁盤,網絡…

每一行末尾添加分號

文本內容如下: TMP_TBX_100_0_A1 TMP_TBX_100_0_A10 TMP_TBX_100_0_A12 TMP_TBX_100_0_A13 TMP_TBX_100_0_A14 TMP_TBX_100_0_A15 TMP_TBX_100_0_A15_2 TMP_TBX_100_0_A16 TMP_TBX_100_0_A17 TMP_TBX_100_0_A18 TMP_TBX_100_0_A19 TMP_TBX_100_0_A19_2 TMP_TBX_100…

壯觀霉素抗性基因原理_基因組學深入挖掘·研究方案(下篇)

前情回顧上次小編為大家講解了四種以基因組為基礎的多組學聯合研究方案(基因組與轉錄組,深入挖掘基因表達信息;基因組聯合代謝組與轉錄組,鎖定關鍵通路;基因組與群體進化,解析物種發展歷程;基因…

Shell腳本大量示例

幾乎所有的腳本里都有某種流控制結構,很少有例外。流控制是什么?假定有一個腳本,包含下列幾個命令: #!/bin/sh # make a directory mkdir /home/dave/mydocs # copy all doc files cp *.docs /home/dave/docs # delete all doc fi…

Spark 常見問題小結

原文地址:http://www.aboutyun.com/thread-9946-1-1.html -------------------------------------- 問題導讀 1、當前集群的可用資源不能滿足應用程序的需求,怎么解決? 2、內存里堆的東西太多了,有什么好辦法嗎? …

dataframe數據標準化處理_數據預處理——標準化/歸一化(實例)

這次我們來說說關于數據預處理中的數據標準化及歸一化的問題。主要以理論實例的方式為大家展示。本次實驗也將會展示部分數據以及代碼,有興趣的小伙伴可以自己動手試試~在本次實例過程中,我們使用的數據是:2010-2018年間廣州市經濟與環境的時…

python實現自動打電話軟件_全自動手勢聯系軟件 讓你輕輕松松打電話

電話號碼超級多的童鞋們,由于手機里存儲的電話太多,每次要找某個人的電話很難找,有木有同感的?小編今天像大家推薦一款新潮的幫助你輕松找到想要的電話的模式,有沒有很想知道呢?其實小編本來是想賣個關子的…

電腦的虛擬服務器位置,如何配置基于IP地址的虛擬主機

滿意答案虛擬主機簡介:1. 把一臺運行在互聯網上的服務器分成多個虛擬的服務器。2. 每一個虛擬主機都具有獨立的域名和完整的Internet服務器(支持WWW,FTP,E-mail等)。3. 一臺服務器上的不同虛擬主機是各自獨…

VMware配置額外內存設置

配置額外內存設置 額外內存設置用于控制主機系統中的內存管理器如何將虛擬機從物理 RAM 中換出。 要配置額外內存設置,請選擇[編輯] > [首選項] > [內存]。 [調整所有虛擬機內存使其適應預留的主機 RAM] 選擇此選項會對給定時間內可以運行的虛擬機的數量和內…