2016-05-14 7 views
2

versucht, Controller-Variable in ng-Wiederholung mit dem gleichen Namen zugreifen. z.B.AngularJs - Zugriffsbereich Variable in NG-Wiederholung mit dem gleichen Namen

-Controller

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

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

Ansicht

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

aber es funktioniert nicht. Ist es möglich, auf diese Variable (Object) innerhalb von ng-repeat mit demselben Namen zuzugreifen?

Antwort

3

Ein Weg, um es zu machen, ist der Zugriff auf Variablen durch Benennung Ihres Controllers (ein Beispiel here in doc).

Sie können Ihre Controller-Namen wie ng-controller="TestCtrl as ctrl"

Dann müssen Sie einige Änderungen in Ihrem Ansicht:

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

Und in Ihrem Controller:

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 
}); 

Endlich, Nami ng Controller ist eine ziemlich gute Übung.

Hoffe es hilft!

1

Wenn Sie beabsichtigen, $scope.items als Array zu verwenden, verwenden Sie eckige Klammern, keine geschweiften Klammern.

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

Ihr ng-repeat Iterator kann alles sein. Es besteht keine Notwendigkeit, eine übergeordnete Bereichsvariable zu überladen.

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

Auch wenn die übergeordnete Variable nicht überlastet ist, gibt es keine Notwendigkeit $parent zu verwenden.

Die Variablen in Elementen, die von ng-repeat wiederholt werden, erben prototypisch vom übergeordneten Bereich. Weitere Informationen finden Sie unter What are the nuances of scope prototypal/prototypical inheritance in AngularJS?

Verwandte Themen