AngularJS禁用双向绑定

时间:2015-08-13 13:11:22

标签: javascript angularjs

这实际上可能是一个JavaScript问题,但是当我使用AngularJs时会发生这种情况。

说我有这样的数组:

var teams = [
    {
        id: 1,
        name: 'Team 1',
        members: players
    },
    {
        id: 2,
        name: 'Team 2',
        members: players
    }
];

然后我有另一个这样的数组:

teams[0].members[0].position = 1;

如果我决定将一个名为position的新属性添加到其中一个团队:

foo

我不希望它更新第二个团队成员的位置。 我希望这是有道理的。

这是一个用于说明我的问题的代码:

http://codepen.io/r3plica/pen/ZGZXjb?editors=101

3 个答案:

答案 0 :(得分:4)

java脚本中的数组是可变的,因此您需要复制播放器并将其分配给团队成员属性。

只需将您的代码更改为:

var teams = [
{
    id: 1,
    name: 'Team 1',
    members: angular.copy(players)
},
{
    id: 2,
    name: 'Team 2',
    members: angular.copy(players)
}

];

有关详细信息,请参阅:https://docs.angularjs.org/api/ng/function/angular.copy

答案 1 :(得分:2)

唯一的方法(如果两队都有相同的球员)是为第二支球队使用阵列的副本。现在,第二个团队得到更新是合乎逻辑的,因为两个团队都指向players的相同引用。

您可以使用angular.copy

var copyofplayers = [];
angular.copy(players, copyofplayers);

答案 2 :(得分:0)

也可以像

一样使用jQuery.extend()
var teams = [
{
    id: 1,
    name: 'Team 1',
    members: jQuery.extend({}, players)
},
{
    id: 2,
    name: 'Team 2',
    members: jQuery.extend({}, players)
}
];