我对此fiddle中的示例感到困惑。我在具有ng-repeat的元素上设置控制器,以便为每个项目创建一个新的控制器实例。由于ng-repeat为每个项创建一个新范围,因此控制器应接管新创建的范围,以便ng-repeat="item in items"
,item
在控制器上变为$scope.item
。如果我通过注入$ scope使用常规控制器约定,这可以正常工作,如示例所示。但是,我认为是" Controller as"的类似语法。不起作用,例如如果我定义ng-controller="FirstCtrl as first"
,那么对于ng-repeat="item in items"
,item
不可用作this.item
。这是为什么?
答案 0 :(得分:3)
您可以使用ng-init使范围项可供控制器使用:
<强> HTML:强>
<div ng-repeat="item in items"
ng-controller="ItemController as ctrl"
ng-init="ctrl.init( item )">
...
</div>
<强>控制器:强>
.controller('ItemController,[
function(){
this.init = function(item){
this.item = item;
}
}
])
更新了小提琴:
答案 1 :(得分:0)
你自己说:
对于
ng-repeat="item in items"
,item
变为$scope.item
在控制器上。
它在$scope
上可用,而不在this
上。而且,正如Yoshi指出的那样,$scope
与this
不同。 (SO上有一些关于此问题的good resources
如果您想知道“为什么我仍然可以看到数字?”,那是因为您正在从父控制器访问items
。