Si votre code HTML est comme ci-dessous, vous pouvez faire quelque chose comme ceci:
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
Ensuite, vous pouvez accéder à la portée parent comme suit
function ParentCtrl($scope) {
$scope.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentcities = $scope.$parent.cities;
}
Si vous souhaitez accéder à un contrôleur parent à partir de votre vue, vous devez faire quelque chose comme ceci:
<div ng-controller="xyzController as vm">
{{$parent.property}}
</div>
Voir jsFiddle: http://jsfiddle.net/2r728/
Mise à jour
En fait, puisque vous avez défini cities
dans le contrôleur parent, votre contrôleur enfant héritera de toutes les variables de portée. Donc, théoriquement, vous n'avez pas à appeler $parent
. L'exemple ci-dessus peut également s'écrire comme suit:
function ParentCtrl($scope) {
$scope.cities = ["NY","Amsterdam","Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentCities = $scope.cities;
}
Les documents AngularJS utilisent cette approche, ici vous pouvez en savoir plus sur le $scope
.
Une autre mise à jour
Je pense que c'est une meilleure réponse à l'affiche originale.
HTML
<div ng-app ng-controller="ParentCtrl as pc">
<div ng-controller="ChildCtrl as cc">
<pre>{{cc.parentCities | json}}</pre>
<pre>{{pc.cities | json}}</pre>
</div>
</div>
JS
function ParentCtrl() {
var vm = this;
vm.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl() {
var vm = this;
ParentCtrl.apply(vm, arguments); // Inherit parent control
vm.parentCities = vm.cities;
}
Si vous utilisez la controller as
méthode, vous pouvez également accéder à la portée parent comme suit
function ChildCtrl($scope) {
var vm = this;
vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}
Comme vous pouvez le voir, il existe de nombreuses façons d'accéder $scopes
.
function ParentCtrl() {
var vm = this;
vm.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
var vm = this;
ParentCtrl.apply(vm, arguments);
vm.parentCitiesByScope = $scope.pc.cities;
vm.parentCities = vm.cities;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<div ng-app ng-controller="ParentCtrl as pc">
<div ng-controller="ChildCtrl as cc">
<pre>{{cc.parentCities | json}}</pre>
<pre>{{cc.parentCitiesByScope | json }}</pre>
<pre>{{pc.cities | json}}</pre>
</div>
</div>
angular.module('app').controller('ParentCtrl', ParentCtrl);
JavaScript
voir: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Je viens de vérifier
travaille pour moi.
et ce sera
pour la vue.
la source
Lorsque vous utilisez la
as
syntaxe, commeParentController as parentCtrl
pour définir un contrôleur, puis pour accéder à la variable de portée parent dans le contrôleur enfant, utilisez ce qui suit:Où
parentCtrl
est le nom du contrôleur parent utilisant laas
syntaxe etid
est une variable définie dans le même contrôleur.la source
Parfois, vous devrez peut-être mettre à jour les propriétés parent directement dans la portée enfant. par exemple, besoin de sauvegarder une date et une heure du contrôle parent après les modifications par un contrôleur enfant. par exemple Code dans JSFiddle
HTML
JS
la source
Vous pouvez également contourner l'héritage de portée et stocker des éléments dans la portée "globale".
Si vous avez un contrôleur principal dans votre application qui encapsule tous les autres contrôleurs, vous pouvez installer un "raccordement" à la portée globale:
Ensuite, dans n'importe quel contrôleur enfant, vous pouvez accéder à la portée "globale" avec
$scope.root
. Tout ce que vous définissez ici sera globalement visible.Exemple:
la source
Je crois avoir eu un dilemme similaire récemment
Ma configuration était un peu différente, mais la même chose devrait probablement encore fonctionner
la source
À partir d'un composant enfant, vous pouvez accéder aux propriétés et méthodes du composant parent avec «require». Voici un exemple:
Parent:
Enfant:
la source
Super facile et fonctionne, mais je ne sais pas pourquoi ....
la source
C'est peut-être boiteux, mais vous pouvez également les pointer vers un objet externe:
L'avantage ici est que les modifications dans ChildCtrl se propagent désormais aux données dans le parent.
la source