0

Lassen Sie uns sagen, dass meine Großeltern Komponente/Richtlinie der Anwendungsbereich Variable wie folgt erklärt: $scope.g = { // methods here };Drag & Drop Angular 1.x-Richtlinie/Komponente und übergeordneten Bereich

In jedem meiner verschachtelten Komponente/Richtlinie der Controller, ich bin auf Diese Variable wie $scope.$parent.$parent.g und dann einige Funktionen von g wie $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); }; aufrufen. Das funktioniert gut (obwohl ich eine bessere Möglichkeit haben würde, auf Vorfahren wie einen Aliasnamen zu verweisen, anstatt auf eine $ Elternkette).

Wenn ich eine Komponente nativ aus ihrer Großmutter-Komponente in eine andere Großeltern-Geschwisterkomponente ziehe (habe ich das?), Zeigt das gleiche $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); }; immer noch auf den ursprünglichen Bereich, nicht den neuen wie ich es brauche. Wenn Sie also auf dasselbe ng-klickbare Element klicken, wird immer noch die Methode run() im Bereich des vorherigen Großelternteils ausgelöst.

Das macht alles Sinn; Aber gibt es eine Möglichkeit, den Bereich auf den neuen Grovaterentfernungsbereich für verlorene Standorte zu verweisen?

Danke!

EDIT
Das Markup wäre so etwas wie folgt gestaltet sein, wo <g-directive> als Großeltern behandelt wird, weil es transclude auf seine Vorlage verwendet, letztlich die untergeordneten Richtlinien Einwickeln:

<g-directive> 
    <child-directive></child-directive> 
    <another-child-directive></another-child-directive> 
    <yet-another-child-directive></yet-another-child-directive> 
</g-directive> 
<g-directive> 
    <c-child-directive></c-child-directive> 
    <c-another-child-directive></c-another-child-directive> 
    <c-yet-another-child-directive></c-yet-another-child-directive> 
</g-directive> 

, die für die ist der Grund, $scope.$parent.$parent.g zu den untergeordneten Direktiven/Komponenten.

Eine untergeordnete Komponente kann gezogen und dann in eine andere <g-directive> eingefügt werden, aber der Controller zeigt immer noch auf seinen ursprünglichen Großelternteil (ursprüngliche Controller-Bereichsvariable <g-directive>). Ich möchte, dass es auf das neue Großelternteil zeigt, in das ich hineingelegt habe, und setze es im Wesentlichen auf den neu platzierten Bereich zurück.

+0

Wenn Sie einen Blick darauf werfen wollen: http://StackOverflow.com/Questions/11252780/Whats-the-correct-way-in-Communicate-between-Controllers-in-angularjs Nicht sicher, warum Sie Sie müssen so viele Eltern aus Ihrem aktuellen Umfang anrufen. – batmaniac7

+0

@maddog Ich denke, das ist hilfreich für einige andere Situationen, aber ich weiß nicht, wie das den Bereich Bezug des Kindes zu einem neuen Großeltern auflösen würde. –

+0

können Sie 'emittieren' und' broadcast' anrufen, um andere Controller anzurufen. Verwenden Sie den Sharing-Service oder eine '$ rootScope'-Variable, um Daten gemeinsam zu nutzen. – batmaniac7

Antwort

0
<g-directive some-attr=1> 
<child-directive></child-directive some-attr=1> 
<another-child-directive></another-child-directive some-attr=1> 
<yet-another-child-directive></yet-another-child-directive some-attr=1> 
</g-directive> 

<g-directive some-attr=2> 
<child-directive></child-directive some-attr=2> 
<another-child-directive></another-child-directive some-attr=2> 
<yet-another-child-directive></yet-another-child-directive some-attr=2> 
</g-directive> 

Jeder kann für broadcast und emit unterschiedliche Zuhörer haben.

Wenn die Direktiven durch ng-repeat wiederholt werden, dann kann das $index dieses Attribut sein. Hoffe, das hilft.

+0

Danke für die Details gestern. Anstatt diese Arbeit auszuführen, konnte ich die Struktur der Umhüllungskomponente ändern, um einige der Funktionen zu berücksichtigen, die ich ursprünglich den verschachtelten Komponenten zugewiesen hatte und die für meinen Anwendungsfall in Ordnung waren. –

+0

cool. nicht wissen. – batmaniac7