Vue關于對象直接賦值的坑及解決
Vue對象直接賦值的坑
受JavaScript的限制,Vue不能監(jiān)聽到對象屬性的添加或刪除。如果這樣做了,你會發(fā)現(xiàn)添加或刪除的屬性不是響應式的,即無法及時更新視圖。
如果我們需要將a對象賦值給b對象時,要么把b對象的所有屬性都在a對象中定義一下,要么 使用this.$set(this.object,key,value)將b對象中有a對象中沒有的屬性set進去,或者使用Object.assign(this.a,this.b) 將所有可枚舉屬性的值從b對象復制到a對象并返回a對象。(如果有同名屬性的話,b屬性的值會覆蓋a屬性的值)
注意:目前IE瀏覽器不兼容Object.assign(),如果需要兼容IE的話最好不要直接使用這個方法。
比如,我們在頁面上綁定了一個dataForm.userIds
但我們并沒有在data中對dataForm.userIds進行初始化的話,
即使我們在頁面created的時候給它賦值了, 賦值是能賦進去的
但這個userIds屬性仍然不是響應式的,他的值改變不會觸發(fā)視圖的渲染
我們可以這樣做來避免這個問題:
初始化userIds屬性
或 使用this.$set(this.object,key,value)添加對象的userIds屬性,這時候添加的屬性是響應式的。
Vue對象的賦值Object.assign({}, row)
復制功能,想單獨去掉id不傳過去,思路設置局部變量,把整個row對象賦值給newData變量,使用 Object.assign({}, row);使用delete方法刪除newData中的id
copyStep(index,row){ ? ? ? ? // 將對象賦值給一個變量 ? ? ? ? let newData = Object.assign({}, row) ? ? ? ? delete newData.id ? ? ? ? 將處理完的變量傳給下面的兩個方法 ? ? ? ? this.addStep(index,newData); ? ? ? ? this.showEditDialog(index + 1,newData,true); ? ? ? },
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue3+ts數(shù)組去重方及reactive/ref響應式顯示流程分析
這篇文章主要介紹了vue3+ts數(shù)組去重方法-reactive/ref響應式顯示,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04