Ich habe eine Seite Controller, vereinfachte hierZugang Eltern Controller n Stufen höher
angular.module('app').controller('MyCtrl', function() {
this.name = 'David'
});
Ich verwende die controllerAs Syntax in meiner Vorlage (MyCtrl als Haupt) so verwende ich nur main.name in meinem Vorlage, um auf den Namen zuzugreifen. Alles gut.
In meiner Vorlage habe ich eine Reihe von verschachtelten Direktiven, die neue Bereiche erstellen und irgendwo unten habe ich eine ng = Controller = "SubCtrl als SubController". Ich kann jetzt auf Eigenschaften auf dem Sub-Controller zugreifen, indem Sie subcontroller.property und innerhalb dieser Vorlage kann ich noch auf main.name zugreifen, weil ControllerAs ist genial.
Das Problem ist, dass ich in meinem zweiten Controller-Code auf Dinge im übergeordneten Controller zugreifen muss, der zu diesem Zeitpunkt n Ebenen tief ist. Ich weiß, ich kann dies in der Hauptsteuerung wie folgt tun ...
$scope.main = this;
und dann diese
var main = $scope.$parent.$parent.$parent.$parent.main;
in der zweiten Steuerung zu tun, aber wir alle wissen, wir sollten das nicht tun und ich gewann Ich weiß sowieso nicht, wie viele Ebenen es wirklich ist, weil ich nicht wissen kann, wie viele Anweisungen der Entwickler darin abgelegt hat, um einen neuen Bereich zu erstellen.
Ich höre einige Leute reden über die Schaffung eines Dienstes für diese, aber das klingt wie es wäre schwierig, generisch zu tun, und ich möchte nicht die Benutzer von meinem Framework müssen einen Service jedes Mal erstellen, wenn sie ein Include in ein Tab-Panel, das wäre verrückt.
Also ist meine aktuelle Idee, Bereiche zu verwenden und eine Funktion zu schreiben, die übergeordnete Bereiche durchlaufen wird, bis es den Bereich findet, den Sie mithilfe einer Vergleichsfunktion angeben. Ich denke, dass es einen besseren Weg geben könnte.
Wer zur Hölle wählt eine Frage aus, ohne zu zeigen, was damit nicht stimmt? Ich dachte, ich erklärte es ziemlich gut und es ist eine vollkommen gültige Frage. – jonhobbs
also warum nicht einen Service erstellen? Ein Service ist ein großartiger Ort, um Daten zu speichern oder auf etwas zuzugreifen, das für mehr als einen Controller, eine Richtlinie, eine Fabrik oder was auch immer benötigt wird. Es ist im Grunde ein Singleton, Sie injizieren an mehreren Stellen, aber es wird immer die gleiche Instanz injiziert. Es ist sehr einfach zu verwenden und viel weniger spröde als was Sie im Sinn haben ($ parent. $ Parent.n ..... Daten). Es ist auch viel mehr testbar, wenn Sie Ihre Komponententests durchführen. – Igor
Ich war dort, und ich garantiere Ihnen, dass es nichts Besseres als einen Service gibt, wenn Sie Informationen zwischen Controllern austauschen möchten. ZB: ein Dienst zum Speichern von Informationen auf dem Benutzer 'infoService'. Die 'mainCtrl' könnte' infoService.registerUser ({name: 'David'}) 'machen und dann kann' subCtrl' 'infoService.getLatestUser()' – pavlag