Vorrei capire perché quando si utilizza uno ng-repeat
con un determinato controller sull'elemento della ripetizione, il genitore di quell'elemento e il nonno di quell'elemento sono lo stesso controller. Mi aspettavo che il nonno fosse il genitore del controllore genitore, non lo stesso controller.
Ecco il codice per chiarire questo
HTML
<div ng-controller="MainController">
{{name}}
<div ng-controller="SecondController">
{{name}}
<ul>
<li ng-repeat="item in list" ng-controller="ItemController">
{{item.name}} {{$parent.name}} {{myDad}} {{myGrandpa}}
</li>
</ul>
<div ng-controller="ThirdController">
{{name}} {{$parent.name}} {{myDad}} {{myGrandpa}}
</div>
</div>
</div>
JS
angular.module('app', []);
angular.module('app')
.controller('MainController', function($scope) {
$scope.name = "MainController";
})
.controller('SecondController', function($scope) {
$scope.name = "SecondController";
$scope.list = [
{'name': 'aaa'}
];
})
.controller('ItemController', function($scope) {
$scope.name = "ItemController";
$scope.myDad = $scope.$parent.name;
$scope.myGrandpa = $scope.$parent.$parent.name;
})
.controller('ThirdController', function($scope) {
$scope.name = "ThirdController";
$scope.myDad = $scope.$parent.name;
$scope.myGrandpa = $scope.$parent.$parent.name;
});
Qui a que CodePen
Il ng-repeat ha il suo probabilmente, molte altre direttive possono creare i propri scopi, quindi è meglio non fare affidamento su '$ parent'. Le proprietà dell'ambito sono ereditate, quindi se vuoi assicurarti di avere accesso a un certo elemento in un bambino puoi sempre creare un oggetto, come '$ scope.secondData = {};' e accedere a 'secondData' sul tuo scope. –
Ma nel mio caso mi piacerebbe '$ broadcast' qualcosa di forma il nonno dopo una certa funzione sul nipote. Quindi probabilmente '$ rootScope' è l'opzione migliore? – stilllife