33 votes

puis-je hériter des variables d'un contrôleur parent?

Voici mon code:

 function ParentCtrl($scope) {
$scope.people = ["Tom", "Dick", "Harry"];
$scope.count = $scope.people.length;
}

function ChildCtrl($scope) {
$scope.parentpeople = ParentCtrl.people //this is what I would like to do ideally
}
 

Je niche un controller angulaire dans un autre. Je voudrais passer des variables du premier controller au second. Est-ce que quelqu'un sait comment faire ça?

REMARQUE

Je ne peux pas faire quelque chose comme

 ChildCtrl.prototype = new ParentCtrl();
 

parce que je vais écraser la propriété people du ChildCtrl .

46voto

Mark Rajcok Points 85912

Par défaut, les étendues enfants héritent de manière prototypique de la portée parent (voir Portée ), de sorte que vous avez déjà accès aux propriétés du contrôleur parent dans l'enfant. Pour le prouver:

 function ChildCtrl($scope) {
    alert($scope.people)
}
 

25voto

kstep Points 773

Vous tromper. Vous êtes contrôleur de mixage héritage avec la portée de l'héritage, et ils sont différents et faiblement couplés à AngularJS.

Ce que vous vraiment ce qu'est:

function ParentCtrl($scope) {
    $scope.people = ["Tom", "Dick", "Harry"];
    $scope.count = $scope.people.length;
}

function ChildCtrl($scope) {
    $scope.parentpeople = $scope.$parent.people;
}

Et il va travailler pour le cas:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
    </div>
</div>

Mais tant que Marque et de ganaraj remarqué ci-dessus, cela n'a aucun sens, car vous pouvez accéder à votre propriété de $champ d'application.les gens de ParentCtrl et ChildCtrl.

Si vous souhaitez hériter des contrôleurs les uns des autres, vous avez besoin d'utiliser l'héritage de prototype des fonctions de la manette eux-mêmes.

9voto

ganaraj Points 14228

L'héritage $ scope est basé sur l'endroit où vous référencez vos contrôleurs à l'aide de ng-controller.

Si vous avez quelque chose comme

 <div ng-controller="ParentController">
    <div ng-controller="ChildController">
    </div>
</div>
 

Alors oui, le contrôleur enfant héritera des propriétés du contrôleur parent.

Remarque: Le contrôleur enfant n'a pas besoin d'être défini sur l'enfant direct dans le code HTML. Ce peut être n'importe quel enfant à l'intérieur.

4voto

Vous pouvez aussi obtenir la portée de n'importe quel contrôleur par DOM:

$ needleScope = angular.element (aDomElement) .scope ()

Utilisation de jQuery:

$ needleScope = $ ('# aDomElementId'). scope ()

Ou obtenez toute la portée dans le document:

$ allScopes = $ ('. ng-scope'). scope ()

Bonne chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X