即使控制器具有不同的元素,指令范围数组也具有相同的元素。为什么?

时间:2014-08-28 21:25:38

标签: javascript angularjs

我有一个指令

scope: {
   cards : "="
}

在我的控制器中$scope.cards开始为空,然后在对我的服务器进行异步调用之后,我将对象推入其中。它结束了这样的事情:

$scope.cards = [{name:"hello",type:"world"}, 
          {name:'different name',type:'different type'}, ...etc etc ]

这是一个简单的card in cards,然后是页面{{card.name}}中的某个地方

当我进入我的页面时,我确实看到了所有不同的名字。

我的指令允许我拾取并拖动元素。在我的指令中,我希望每个元素的scope.cards[i].name不同。我使用console.log(scope.cards[i].name)来查看名称是否不同(其中i是每个元素的索引)。

但出于某种原因,scope.cards对于每个元素都是相同的。具体来说,它是scope.cards中的最后一个条目。

发生了什么事?为什么指令假设数组中的所有元素都相同?

1 个答案:

答案 0 :(得分:0)

我最初认为我的问题是我没有使用scope.$apply

然而,经过进一步调查,问题是我的索引是通过我的控制器绑定的原始数据类型。

以下链接可以很好地了解范围,但基本上,原始数据类型在指令中创建本地副本。因此,当我尝试将基元的值更改为+ = 1时,它不会更改父值。因此我的索引总是为0。

要纠正这个问题,我必须使我的索引成为非原始数据类型。

在我的控制器中,而不是$scope.my_index = 0它变为$scope.my_index = [0],这是第一个值为0的数组。现在在我的指令scope.my_index[0] = scope.my_index[0] + 1中工作。

https://github.com/angular/angular.js/wiki/Understanding-Scopes