AngularJS:ng-repeat循环的变量没有足够快地更新$ scope

时间:2014-02-15 17:52:26

标签: angularjs angularjs-ng-repeat ng-repeat

我在$ scope中有一个项目树,我想用ng-repeat进行迭代,并根据节点类型包含不同的模板。树就像

$scope.item = {
  ID: 1,
  children: {
    1: {
      ID: 11,
      },
    2: {
      ID: 12,
    }
  },
};

问题是当我做

之类的事情时
<div ng-repeat="item in item.children">
  item.ID : {{item.ID}}
  <div ng-include="showVars(item.ID)"></div>
</div>

showVars函数的参数是在父范围内计算的item.ID值,而不是ng-repeat创建的子范围。使用{{item.ID}}显示时,值仍然正确。

this Fiddle中的示例。

我的理解是,当我调用函数时,子范围中的值还没有更新,我是对的吗?这是AngularJS的正常行为还是错误?

编辑:

为了使它更明确,我希望小提琴

calling getTemplate with $scope.item.ID = 12 and itemID = 12

而不是

calling getTemplate with $scope.item.ID = 1  and itemID = 12

因为ng-repeat应该使用变量赋值$ scope.item。

谢谢,

1 个答案:

答案 0 :(得分:4)

这是预期的行为。

当您创建控制器的showVars函数时,您将关闭$scope,这是父控制器的范围。因此,当您引用$scope时,您将获得注入控制器的范围。

换句话说,$scope不会根据函数的执行而改变。这就是您希望将项目作为参数传递给函数的原因。

如果要访问该功能中的子范围,可以使用this执行此操作:

this.item.ID

这是一个有效的JS Fiddle