vue數(shù)組雙向綁定問(wèn)題及$set用法說(shuō)明
vue數(shù)組雙向綁定問(wèn)題及$set用法
在vue開發(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ù)開始的元素,并在給定的 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實(shí)現(xiàn)定位并解決內(nèi)存泄漏
Vue.js?是一個(gè)流行且強(qiáng)大的?JavaScript?框架,它允許我們構(gòu)建動(dòng)態(tài)和交互式?Web?應(yīng)用程序,本文我們將深入探討?Vue.js?應(yīng)用程序中內(nèi)存泄漏的原因,并探索如何定位和修復(fù)這些問(wèn)題的有效策略,希望對(duì)大家有所幫助2023-09-09
vue3 + vite + ts 中使用less文件全局變量的操作方法
這篇文章主要介紹了vue3 + vite + ts 中使用less文件全局變量的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03
vue-router路由跳轉(zhuǎn)問(wèn)題 replace
這篇文章主要介紹了vue-router路由跳轉(zhuǎn)問(wèn)題 replace,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue項(xiàng)目打包后部署到服務(wù)器的詳細(xì)步驟
這篇文章主要介紹了vue項(xiàng)目打包后部署到服務(wù)器,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09

