ng-repeat和" Controller as"

时间:2014-09-17 14:45:04

标签: javascript angularjs

我对此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。这是为什么?

2 个答案:

答案 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;
        }
    }
]) 

更新了小提琴:

http://jsfiddle.net/xvdj07q9/3

答案 1 :(得分:0)

你自己说:

  

对于 ng-repeat="item in items" item 变为    $scope.item 在控制器上。

它在$scope上可用,而不在this上。而且,正如Yoshi指出的那样,$scopethis不同。 (SO上有一些关于此问题的good resources

如果您想知道“为什么我仍然可以看到数字?”,那是因为您正在从父控制器访问items