我知道大多数人在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