我知道大多數人在HTML中顯示的變量中引用了雙向綁定,但我仍然遇到了同樣的問題,意識到Angular有一些基本的東西,我不理解。初始化變量等於另一個,而沒有將來的變化,前者會影響後者在AngularJS
爲了解決這個問題,我正在開發一款RPG瀏覽器遊戲。我想每一個字符都被表示爲baseStats:
'baseStats' : {
'defense' : 5,
'strength' : 3,
'speed' : 7
}
,但戰鬥的過程中,他們可能會被「磨光」或「debuffed」,所以我希望能夠跟蹤這些變化不會永久更改角色統計信息,因此baseStats存在以保留統計信息的「原始」狀態。
vm.restoreAll = function() {
angular.forEach(vm.activeAllies, function(ally) {
ally.stats.defense = ally.baseStats.defense;
ally.stats.strength = ally.baseStats.strength;
ally.stats.strength = ally.baseStats.speed;
});
};
這與我的打算完全相同。所有這些統計數據被重置爲baseStat
vm.restoreAll = function() {
angular.forEach(vm.activeAllies, function(ally) {
ally.stats = ally.baseStats;
});
}
這顯然是更具可讀性和簡潔,但不幸的是,如果我更改從應用程序的其他地方ally.stats,這些變化影響baseStats爲好。我很困惑,爲什麼會這樣,因爲他們似乎有效地完全相同。
聽起來像你想使用angular.copy()https://開頭docs.angularjs.org/api/ng/function/angular.copy該頁面上的示例顯示了您正在詢問的內容 – Ronnie
這確實給了我預期的結果...謝謝!但是我仍然困惑爲什麼Angular在看起來語法上相同的情況下似乎以兩種不同的方式行事。 –
因爲'ally.stats'只是對'ally.baseStats'的引用。這不是一個副本,這就是爲什麼angular.copy()存在的原因 – Ronnie