Wenn Ihr HTML-Code wie folgt ist, können Sie Folgendes tun:
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
Anschließend können Sie wie folgt auf den übergeordneten Bereich zugreifen
function ParentCtrl($scope) {
$scope.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentcities = $scope.$parent.cities;
}
Wenn Sie aus Ihrer Sicht auf einen übergeordneten Controller zugreifen möchten, müssen Sie Folgendes tun:
<div ng-controller="xyzController as vm">
{{$parent.property}}
</div>
Siehe jsFiddle: http://jsfiddle.net/2r728/
Aktualisieren
Da Sie cities
im übergeordneten Controller definiert haben, erbt Ihr untergeordneter Controller alle Bereichsvariablen. Theoretisch müssen Sie also nicht anrufen $parent
. Das obige Beispiel kann auch wie folgt geschrieben werden:
function ParentCtrl($scope) {
$scope.cities = ["NY","Amsterdam","Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentCities = $scope.cities;
}
Die AngularJS-Dokumente verwenden diesen Ansatz. Hier können Sie mehr über die lesen $scope
.
Ein weiteres Update
Ich denke, dies ist eine bessere Antwort auf das Originalplakat.
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;
}
Wenn Sie die controller as
Methode verwenden, können Sie auch wie folgt auf den übergeordneten Bereich zugreifen
function ChildCtrl($scope) {
var vm = this;
vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}
Wie Sie sehen, gibt es viele verschiedene Möglichkeiten für den Zugriff $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
sehen: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ich habe gerade nachgesehen
funktioniert bei mir.
und es wird sein
für die Aussicht.
quelle
Wenn Sie
as
Syntax verwenden,ParentController as parentCtrl
um einen Controller zu definieren, und dann auf die übergeordnete Bereichsvariable im untergeordneten Controller zugreifen, verwenden Sie Folgendes:Wobei der
parentCtrl
Name des übergeordneten Controllers dieas
Syntax verwendet undid
eine Variable ist, die in demselben Controller definiert ist.quelle
Manchmal müssen Sie möglicherweise die übergeordneten Eigenschaften direkt im untergeordneten Bereich aktualisieren. zB müssen nach Änderungen durch einen untergeordneten Controller ein Datum und eine Uhrzeit der übergeordneten Steuerung gespeichert werden. zB Code in JSFiddle
HTML
JS
quelle
Sie können auch die Bereichsvererbung umgehen und Dinge im "globalen" Bereich speichern.
Wenn Ihre Anwendung einen Hauptcontroller enthält, der alle anderen Controller umschließt, können Sie einen "Hook" für den globalen Bereich installieren:
Dann können Sie in jedem untergeordneten Controller mit auf den "globalen" Bereich zugreifen
$scope.root
. Alles, was Sie hier einstellen, ist global sichtbar.Beispiel:
quelle
Ich glaube, ich hatte kürzlich ein ähnliches Dilemma
Mein Setup war etwas anders, aber das gleiche sollte wahrscheinlich immer noch funktionieren
quelle
Von einer untergeordneten Komponente aus können Sie mit 'require' auf die Eigenschaften und Methoden der übergeordneten Komponente zugreifen. Hier ist ein Beispiel:
Elternteil:
Kind:
quelle
Super einfach und funktioniert, aber nicht sicher warum ....
quelle
Vielleicht ist das lahm, aber Sie können beide auch einfach auf ein externes Objekt richten:
Der Vorteil hierbei ist, dass Änderungen in ChildCtrl jetzt auf die Daten im übergeordneten Element zurückgreifen.
quelle