我在$ 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。
谢谢,
答案 0 :(得分:4)
这是预期的行为。
当您创建控制器的showVars
函数时,您将关闭$scope
,这是父控制器的范围。因此,当您引用$scope
时,您将获得注入控制器的范围。
换句话说,$scope
不会根据函数的执行而改变。这就是您希望将项目作为参数传递给函数的原因。
如果要访问该功能中的子范围,可以使用this
执行此操作:
this.item.ID
这是一个有效的JS Fiddle