2016-06-18 7 views
1

Ich habe eine Direktive, die einen Provider hat, vorausgesetzt, dass dieser Anbieter mehrmals in der gleichen Anwendung konfiguriert werden kann und jede Instanz der Richtlinie die Werte einer anderen Konfiguration übernehmen, aber alle Instanzen der Richtlinie immer übernehmen gleiche Konfiguration. Ich frage mich, wie ich das beheben kann?Provider Rezept

.provider('tabNavBarConfig', function tabNavBarConfigProvider() { 

    this.setNamesTab = function (array) { 
     this.tabs = array || new Array("tab1", "tab2", "tab3", "tab4"); 
    } 


    this.setTabActivated = function (nun) { 
     this.tabActivated = nun; 
    } 


    this.setTabActivatedColor = function (color) { 
     this.tabActivatedColor = color || "#f00"; 
    } 


    this.setBackgroundColor = function (color) { 
     this.backgroundColor = color || "#ddd"; 
    } 


    this.setBackgroundBlockColor = function (color) { 
     this.backgroundBlockColor = color || "#fff"; 
    } 


    this.setTextColor = function (color) { 
     this.textColor = color || "#000"; 
    } 


    /* return instance of provider*/ 
    this.$get = function() { 
     return this; 
    }; 

    }) 

Antwort

1

Es ist wichtig zu beachten, dass AngularJS-Dienste immer Singletons sind. Dies bedeutet, dass sobald AngularJS ein Serviceobjekt erstellt, dieselbe Instanz in Ihrer App erneut verwendet wird. Wenn Sie den Provider mehrmals konfigurieren, werden die Werte in der einzelnen Instanz geändert, die von der Service Factory generiert wird. Daher erhalten alle Ihre Anweisungen die gleichen Werte und keine privaten. Könnten Sie uns bitte weitere Details zu Ihrem Fall geben?

Update 1:

Nach einem Blick auf die Datei nehmen, der richtige Weg, Ihr Ziel zu erreichen, ist die Richtlinie-Controller zu verwenden. Die Link-Funktion wird die Controller-Instanz als Argument erhalten:

function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } 

Auf diese Weise können Sie die Konfigurationswerte spezifisch auf die Richtlinie-Instanz zugreifen. Außerdem wird die Controller-Instanz unter allen Direktiven geteilt, wodurch die Direktiven den Controller als Kommunikationskanal verwenden können.

Ich hoffe, das ist, was Sie suchen. Viel Glück.

+0

Details siehe hier https://github.com/1fabiopereira/tabNavBar/blob/master/dist/unminify/tab_nav_bar.js – 1fabiopereira

+0

Bitte nehmen Sie sich einen Blick auf die Antwort Update 1. –

+0

Wie ich verstehe es getan werden sollte, aber Ich brauche einige Werte aus der Link-Funktion, um die Vorlage zu generieren und einige Berechnungen durchzuführen, und diese Werte müssen zugewiesen werden, bevor die Link-Funktion instanziiert wird. Irgendwelche Vorschläge, wie man das macht? – 1fabiopereira

Verwandte Themen