2016-03-27 5 views
0

Meine Frage wird am besten mit einem Layout meiner Vorlage erläutert.So übergeben Sie Variablen von einem Controller an ein Element außerhalb ihres Gültigkeitsbereichs

<body> 

    <my-directive option1="myVar"></my-directive> 

    <ui-view></ui-view> 

</body> 

Wie Sie sehen können, habe ich eine UI-Ansicht, die Ansichten/Controller mit unterschiedlichem Status wechselt. Das Problem ist, dass nur einer dieser Zustände die notwendigen und logischen Konfigurationsvariablen in seinem Gültigkeitsbereich für 'Meine-Direktive' enthält. Wie kann ich diese Variablen an die Richtlinie weitergeben? Ich versuche, $ RootScope dafür zu vermeiden, aber es scheint mir derzeit die beste Wahl.

+0

Sie die Richtlinie nur dann, wenn auf bestimmten Zustand gezeigt werden sollte bedeuten, oder es nach jedem Zustand nicht ändert? – Daniel

+0

Um genauer zu sein, ist die Direktive eine Kopfzeile, die unter anderem eine Login-/Logout-Schaltfläche hat. Die UI-Ansicht hat zwei Zustände: Einer bietet Benutzern eine Anzeige eines Elements, während ein anderer Zustand es dem Benutzer ermöglicht, den Gegenstand zu bearbeiten. Ich möchte nur, dass der Login-Button nur sichtbar ist, wenn sich die Ansicht im View-Zustand befindet. Der Header muss immer noch angezeigt werden, unabhängig vom Status, weshalb ich ihn nicht verschachtelt habe. –

+0

Sie können es innerhalb der 'directive' Vorlage tun,' ng-if = "$ state.current.name === state1" 'etc ... – Daniel

Antwort

0

Es gibt mehrere Lösungen ist, hängt es von Ihrer Konfigurationsvariablen:

Wenn Ihre Konfigurationsvariablen bei Bootstrap initialisiert werden und sich nie ändert, könnten Sie „Konstanten“ verwenden.

See: https://docs.angularjs.org/api/auto/service/ $ liefern # Konstante

Wenn Ihre Konfigurationsvariablen ändern können, könnten Sie "Werte" verwenden

See: https://docs.angularjs.org/api/auto/service/ $ bieten # Wert

Der letzte Weg, ich weiß ist verwenden Sie einen Dienste

See: https://docs.angularjs.org/api/auto/service/ $

# Service bieten

Dieser Beitrag erläutert die Unterschiede zwischen diesen drei Funktionen: https://gist.github.com/demisx/9605099

Edit: „Wie thoses Lösungen in einer Ansicht direkt zu übergeben“

Eine mögliche Lösung wäre die $ rootScope auf Run-Funktion wie folgt zu initialisieren:

angular.module('myApp') 
    .run(function ($rootScope, yourConfigurationVariables) { 
     $rootScope.aSpecificNameWichReferenceYourChoice = yourConfigurationVariables; 
    }); 

diesen Beitrag anzeigen: Can I directly access module constant from HTML under AngularJS

+0

Großartig, das scheint der Weg zu sein, aber der Artikel nicht Erwähnen Sie, wie Sie diese Werte aus Ihrer Vorlage referenzieren. Wissen Sie das zufällig? –

+0

Haben Sie in Ihrer Richtlinie einen Controller definiert? – Aliz

+0

sie sind modulweit deklariert? Gibt es kein Modul breites Objekt, das ich wie $ root referenzieren kann? einen Kontrolleur auf die Richtlinie zu erklären, nur um diese Werte zu bekommen, scheint mir irgendwie abwegig zu sein. –

Verwandte Themen