AngularJs - 以相同名称的ng-repeat访问范围变量

时间:2016-05-14 20:31:37

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

尝试以相同名称访问ng-repeat中的控制器变量。 e.g。

控制器

$scope.items = [1,2,3,4,5];

$scope.a = {
  data: "Some Data"
};

查看

<div ng-repeat="a in items"> {{ a }} - {{ $parent.a.data }} </div>

但它不起作用。是否可以访问具有相同名称的ng-repeat内的变量(Object)?

2 个答案:

答案 0 :(得分:3)

实现目标的一种方法是通过命名控制器来访问变量(例如here in doc)。

您可以将控制器命名为ng-controller="TestCtrl as ctrl"

然后,您需要在视图中进行一些更改:

<div ng-repeat="a in ctrl.items"> {{ a }} - {{ ctrl.a.data }} </div>

在您的控制器

app.controller('TestCtrl', function($scope) {
    var self = this;
    self.items = [1,2,3,4,5]; //brackets here, not curly brackets as said by @georgeawg 
    self.a = {
        data: "Some Data"
    };

    // Rest of you code
});

最后,命名控制器是一个很好的做法。

希望它有所帮助!

答案 1 :(得分:1)

如果您希望$scope.items成为数组,请使用方括号,而不是大括号。

//Do THIS
$scope.items = [1,2,3,4,5];
//NOT THIS
$scope.items = {1,2,3,4,5};

您的ng-repeat迭代器可以是任何东西。不需要重载父作用域变量。

<div ng-repeat="anything in items"> {{ anything }} - {{ a.data }} </div>

此外,如果父变量未重载,则无需使用$parent

ng-repeat重复的元素中的变量原型继承自父作用域。有关详细信息,请参阅What are the nuances of scope prototypal / prototypical inheritance in AngularJS?