Greifen Sie von einem 'root'-Controller auf den' aktuellen 'Bereich zu

8

Ich habe einen Controller, den ich als meinen 'root'-Controller betrachte, er ist der mit einem ng-controller -Attribut deklarierte, dann ein paar andere Controller, die dynamisch über $routeProvider instanziiert werden. Ich möchte eine Funktion deklarieren, die über ein ng-click -Attribut im Bereich eines der dynamischen / untergeordneten Controller verfügbar ist.

Ich kann die Funktion auf meinem Root-Controller deklarieren, z.

%Vor%

dann sehe ich es in allen Bereichen für alle 'untergeordneten' Controller, aber das $scope , das in dieser Funktion verwendet wird, ist lokal für den Root-Controller, nicht der derzeit aktive Bereich / Controller. Wie kann ich auf den aktiven, untergeordneten Bereich in dieser Funktion zugreifen?

    
ProfK 03.06.2015, 07:02
quelle

2 Antworten

3

Sie können den untergeordneten Bereich einfach als Parameter übergeben:

In Ihrem "root" -Controller:

%Vor%

In Ihrem "Kind" -Controller:

%Vor%

Oder Sie müssen die Funktion von ng-click aufrufen:
In Ihrem "Kinder" -Controller:

%Vor%

Der Vorteil ist, dass Sie in Ihren untergeordneten Controllern denselben Code haben und nur die Funktion in Ihrem Root-Controller ändern müssen, falls Sie die Funktionalität bearbeiten müssen.

    
Cerbrus 03.06.2015, 07:03
quelle
5

Ich habe etwas Arbeit in diesem Plunker , die einige usecases decken.

Die Funktion übernimmt einen Parameter. Dieser Parameter hat in jedem Bereich denselben Namen.

%Vor%

Ihr Hauptregler sieht so aus:

%Vor%

Und überschreiben die "specificName" var in der Untersteuerung:

%Vor%

, um die Funktion in reinen JS So rufen Sie diese in jedem Controller tun können:

%Vor%

BEARBEITEN:

Ich habe gerade gemerkt, dass es eine andere Lösung gibt, die Ihre Bedürfnisse erfüllen kann. Sie können eine Factory oder einen Service verwenden, um die Funktion freizugeben.

Wie der Service aussehen könnte:

%Vor%

Wie Ihr Controller aussehen wird:

%Vor%

Dies ist das gleiche wie Sie die specificName in jedem Controller deklarieren müssen und es an die Funktion übergeben. Aber die Funktion wird in jedem Teil Ihrer Anwendung verwendbar sein. Sie müssen nur den Dienst injizieren und

Details:

Schließlich ist der abstrakte Teil nicht die Funktion, sondern der Name Ihrer Var in jedem Controller. Eine Art konventioneller Benennung.

Wenn diese Variable statusbezogen ist, können Sie sie in der Zustandsdefinition hinzufügen. (Wenn das der Fall ist, könnte ich versuchen, Ihnen ein Beispiel zu geben.)

Ich empfehle auch nicht, einem anderen einen vollständigen $ Bereich zu geben. Das ist keine gute Übung in eckigen.

In der Hoffnung, dass dies Ihr Problem gelöst hat, oder geben Sie genügend Hinweise.

Fühlen Sie sich frei, um spezifischere Sache zu fragen, ich die Antwort bearbeiten werde es an Ihre Bedürfnisse anzupassen.

    
Okazari 03.06.2015 08:34
quelle

Tags und Links