Vue.js - 陣列和物件的賦值動態變化 & 克隆
這篇文章主要介紹了 vue 陣列和物件不能直接賦值動態變化 & 克隆情況和解決方法,需要的朋友可以參考下。
一、直接賦值動態變化
1.1、Vue 不能檢測以下變動的陣列
當你利用索引直接設定一個項時,例如
vm.items[indexOfItem] = newValue
當你修改陣列的長度時,例如
vm.items.length = newLength
1.2、解決方案
當第一種情況需求時,可以使用
this.$set(this.arr,index,newVal)
或
this.arr = [新陣列]
2.1、Vue 不能檢測以下變動的物件
當你修改一個初始化時,不存在的物件裡的屬性時
this.obj.b = 3
Ps:在不重新整理頁面父子元件的情況下,二次觸發就可以,因為由於第一次的觸發渲染,但第一次並沒有觸發,只有第二次會顯示。
2.2、解決方案
當修改一個初始化已存在的屬性,可以直接檢測到動態變化
this.obj.a = 3
或
上面不能檢測到的另一種解決方案
this.$set(this.person,'age',12)
或
this.obj = { a: 3, b: 4 }
當需要新增多個物件時
Object.assign({},this.person,{age:12,name:'wee'})
二、陣列、物件克隆
當元件間傳遞物件時,由於此物件的引用型別指向的都是一個地址(除了基本型別跟null,物件之間的賦值,只是將地址指向同一個,而不是真正意義上的拷貝),如下。
陣列:
var a = [1,2,3];
var b = a;
b.push(4); // b中新增了一個4
alert(a); // a變成了[1,2,3,4]
物件:
var obj = {a:10};
var obj2 = obj;
obj2.a = 20; // obj2.a改變了
alert(obj.a); // 20,obj的a跟著改變
這就是由於物件型別直接賦值,只是將引用指向同一個地址,導致修改了 obj 會導致 obj2 也被修改。
所以在 vue 中,如果多個元件引用了同一個物件作為資料,那麼當其中一個元件改動物件資料時,其他物件的資料也會同步改動。有這種雙向繫結的需要的話,那麼自然是最好的,但如果不需要這種繫結而希望各元件的物件資料之間相互獨立,即是互不關聯的物件副本的話,可以用下面的方法解決。
computed: {
data: function () {
var obj={};
obj=JSON.parse(JSON.stringify(this.templateData)); //this.templateData是父元件傳遞的物件
return obj
}
}
當然日常的克隆也可以使用這句關鍵程式碼
JSON.parse(JSON.stringify(...));
相關文章
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- 陣列賦值陣列賦值
- 動態監控input的值的變化 賦值value觸發賦值
- JS型別判斷、物件克隆、陣列克隆JS型別物件陣列
- vue陣列的深克隆和淺克隆Vue陣列
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- PLSQL Language Referenc-PL/SQL集合和記錄-集合變數賦值-給可變陣列和巢狀表賦NULL值SQL變數賦值陣列巢狀Null
- JavaScript陣列解構賦值JavaScript陣列賦值
- 定義/賦值陣列、 expect預期互動賦值陣列
- 給numpy陣列賦同樣的值陣列
- (entity bean)動態賦值值物件-- Dynamic Create Value Object 模式 (轉)Bean賦值物件Object模式
- [基礎問題] 陣列賦值陣列賦值
- 複製物件重新賦值不改變原物件物件賦值
- 物件屬性值賦給變數物件變數
- 給物件引用變數賦值(轉)物件變數賦值
- 將一個陣列賦值給另外一個陣列陣列賦值
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- 動態賦值弱型別值物件--Dynamic Create Value Object 模式 (轉)賦值型別物件Object模式
- Js陣列物件的屬性值升序排序,並指定陣列中的某個物件移動到陣列的最前面JS陣列物件排序
- SQL server 動態SQL對變數講行賦值SQLServer變數賦值
- C++特點,物件的概念,初始化和賦值C++物件賦值
- php7中為物件/關聯陣列進行解構賦值PHP物件陣列賦值
- 動態陣列陣列
- ES6學習-4 解構賦值(1)陣列的解構賦值賦值陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 在VUE中改變陣列、物件。頁面沒有變化Vue陣列物件
- 克隆一個陣列的方法陣列
- vue:動態給img賦值Vue賦值
- jquery 動態給table賦值jQuery賦值
- html select動態賦值HTML賦值
- PHP中陣列賦值效能及過程PHP陣列賦值
- 靜態動態陣列陣列
- 資料結構筆記整理和思考--動態陣列和靜態陣列的領悟資料結構筆記陣列
- Solidity中函式返回值,靜態動態陣列Solid函式陣列
- 動態監聽輸入框值的變化
- lc2334 元素值大於變化閾值的子陣列陣列
- 2-7 陣列:動態陣列陣列
- 物件和陣列的遍歷物件陣列