vue數(shù)組雙向綁定問(wèn)題及$set用法說(shuō)明
vue數(shù)組雙向綁定問(wèn)題及$set用法
在vue開(kāi)發(fā)中,我們有時(shí)會(huì)遇到數(shù)據(jù)更新視圖不更新問(wèn)題,地址沒(méi)有改變,vue就監(jiān)測(cè)不到數(shù)據(jù)變化。這個(gè)時(shí)候,雙向綁定就失效了。
以下這幾種情況,Vue都會(huì)檢測(cè)不到數(shù)據(jù)的變化
當(dāng)你利用索引直接設(shè)置一個(gè)數(shù)組項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue
當(dāng)你修改數(shù)組的長(zhǎng)度時(shí),例如:vm.items.length = newLength
由于 JavaScript 的限制,Vue不能檢測(cè)對(duì)象屬性的添加或刪除
數(shù)組實(shí)現(xiàn)響應(yīng)式的七個(gè)方法
push()
可向數(shù)組的末尾添加一個(gè)或多個(gè)元素,并返回新的長(zhǎng)度pop()
從數(shù)組的尾部刪除一個(gè)元素,返回刪除的元素unshift()
向數(shù)組的前面添加元素,返回值:數(shù)組的新長(zhǎng)度shift()
從數(shù)組頭部刪除一個(gè)元素,返回刪除的元素splice()
刪除:兩個(gè)參數(shù),splice(index,num) 刪除的第一項(xiàng)的位置以及要?jiǎng)h除的項(xiàng)數(shù)
添加:三個(gè)參數(shù),插入起始位置、刪除的項(xiàng)數(shù)(為0)、插入的項(xiàng),向指定位置插入任意數(shù)量的項(xiàng)。arr.splice(1,0,"or","ue")
替換:先刪除再添加,三個(gè)參數(shù):起始位置、刪除的項(xiàng)數(shù)、要添加的項(xiàng)數(shù)。添加的與刪除的數(shù)量不一定要一致。arr.splice(1,2,"or","ue")
sort()
對(duì)數(shù)組元素進(jìn)行排序,默認(rèn)根據(jù)字符串Unicode碼進(jìn)行排序,對(duì)數(shù)字進(jìn)行排序時(shí)參數(shù)要傳遞一個(gè)比較函數(shù)。
?? ?sortNumber(a,b){ ?? ? ? ? ?return a-b ?? ?};
reverse()
該方法用于顛倒數(shù)組中元素的順序
上面的方法把原數(shù)組更改掉,可以選用這些方法來(lái)實(shí)現(xiàn)響應(yīng)式。
flter()、concat() 和 slice()。它們不會(huì)變更原始數(shù)組,而總是返回一個(gè)新數(shù)組。使用這些方法會(huì)造成數(shù)據(jù)雙向綁定失效。
filter()
創(chuàng)建一個(gè)新的數(shù)組,新數(shù)組中的元素是通過(guò)檢查指定數(shù)組中符合條件的所有元素。concat()
用于連接兩個(gè)或多個(gè)數(shù)組。該方法不會(huì)改變現(xiàn)有的數(shù)組.slice()
可從已有的數(shù)組中返回選定的元素,選擇從給定的 start 參數(shù)開(kāi)始的元素,并在給定的 end 參數(shù)處結(jié)束,但不包括。該方法并不會(huì)修改數(shù)組,而是返回一個(gè)子數(shù)組.
$set用法
當(dāng)數(shù)據(jù)沒(méi)有被雙向綁定的時(shí)候,我們可以使用$set
this.$set(原數(shù)組, 索引值, 需要賦的值)
vue中$set解決數(shù)據(jù)雙向綁定
由于 JavaScript 的限制,Vue 不能檢測(cè)以下變動(dòng)的數(shù)組:
當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue
解決:用$set方法
當(dāng)你修改數(shù)組的長(zhǎng)度時(shí),例如:vm.items.length = newLength
解決:vm.items.splice(newLength)
this.$set(Object, key, value) //this.$set(this.list[i],"flag",true)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue路由監(jiān)聽(tīng)實(shí)現(xiàn)同頁(yè)面動(dòng)態(tài)加載的示例
本文主要介紹了Vue基于路由監(jiān)聽(tīng)實(shí)現(xiàn)同頁(yè)面動(dòng)態(tài)加載的示例,重點(diǎn)在于切換路由的時(shí)候,重新拉取列表數(shù)據(jù),接下來(lái)看看實(shí)現(xiàn)方法吧2021-05-05Element?Plus的el-tree-select組件懶加載+數(shù)據(jù)回顯詳解
el-tree-select組件是el-tree和el-select的結(jié)合體,他們的原始屬性未被更改,下面這篇文章主要給大家介紹了關(guān)于Element?Plus的el-tree-select組件懶加載+數(shù)據(jù)回顯的相關(guān)資料,需要的朋友可以參考下2022-11-11解決VUE自定義拖拽指令時(shí) onmouseup 與 click事件沖突問(wèn)題
這篇文章主要介紹了解決VUE自定義拖拽指令時(shí) onmouseup 與 click事件沖突問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Vue(定時(shí)器)解決mounted不能獲取到data中的數(shù)據(jù)問(wèn)題
這篇文章主要介紹了Vue(定時(shí)器)解決mounted不能獲取到data中的數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07vite+ts vite.config.ts使用path報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了vite+ts vite.config.ts使用path報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vue中使用[provide/inject]實(shí)現(xiàn)頁(yè)面reload的方法
這篇文章主要介紹了在vue中使用[provide/inject]實(shí)現(xiàn)頁(yè)面reload的方法,文中給大家提到了在vue中實(shí)現(xiàn)頁(yè)面刷新不同的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09vue-element換膚所有主題色和基礎(chǔ)色均可實(shí)現(xiàn)自主配置
這篇文章主要介紹了vue-element換膚所有主題色和基礎(chǔ)色均可實(shí)現(xiàn)自主配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04