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賦值物件陣列變數
- JS型別判斷、物件克隆、陣列克隆JS型別物件陣列
- 動態監控input的值的變化 賦值value觸發賦值
- vue陣列的深克隆和淺克隆Vue陣列
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- JavaScript陣列解構賦值JavaScript陣列賦值
- ArrayList動態陣列物件 c# 1231陣列物件C#
- 給numpy陣列賦同樣的值陣列
- 陣列未被賦值時其值為多少?陣列賦值
- Js陣列物件的屬性值升序排序,並指定陣列中的某個物件移動到陣列的最前面JS陣列物件排序
- 複製物件重新賦值不改變原物件物件賦值
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- 物件屬性值賦給變數物件變數
- lc2334 元素值大於變化閾值的子陣列陣列
- C++特點,物件的概念,初始化和賦值C++物件賦值
- php7中為物件/關聯陣列進行解構賦值PHP物件陣列賦值
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 克隆一個陣列的方法陣列
- shared_ptr和動態陣列陣列
- Solidity中函式返回值,靜態動態陣列Solid函式陣列
- 在VUE中改變陣列、物件。頁面沒有變化Vue陣列物件
- 動態陣列陣列
- ES6學習-4 解構賦值(1)陣列的解構賦值賦值陣列
- 靜態動態陣列陣列
- PHP中陣列賦值效能及過程PHP陣列賦值
- 2-7 陣列:動態陣列陣列
- [JAVA] Java 陣列、多維陣列,動態、靜態初始化,陣列JVM記憶體模型分析Java陣列JVM記憶體模型
- js陣列物件複製拷貝不改變原來的值,深拷貝JS陣列物件
- 動態監聽輸入框值的變化
- Java建立陣列、賦值的四種方式,宣告+建立+初始化 詳解Java陣列賦值
- vue:動態給img賦值Vue賦值
- 建立動態陣列陣列
- 合併陣列物件中相同的屬性值陣列物件
- Java值物件或DTO克隆工具Java物件
- JS 獲取陣列物件的值&提取Object的valueJS陣列物件Object
- 陣列004 動態建立一維陣列陣列
- 變數的賦值 指標間接賦值變數賦值指標
- uniapp動態賦值頭部<title>APP賦值