2016-06-18 119 views
1

我有一個指令有一個提供者,假設這個提供者可以在同一個應用程序中多次配置,並且指令的每個實例都採用不同配置的值,但指令的所有實例總是假定相同的配置。我不知道如何解決這個問題?提供商配方

.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; 
    }; 

    }) 

回答

1

請務必注意,AngularJS服務始終是單身人士。這意味着,一旦AngularJS構造一個服務對象,整個應用程序就會重用相同的實例。 因此,多次配置提供程序將更改服務工廠生成的單個實例中的值。因此,你所有的指令都會得到相同的值,而不是私有值。 您能否介紹一下您的案例?

更新1:

考慮看看文件後,實現你的目標的正確方法是使用該指令的控制器。鏈接功能將接收控制器實例作爲參數:

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

這樣您就可以訪問特定於指令實例的配置值。此外,控制器實例在所有指令中共享,允許指令將控制器用作通信通道。

我希望這是你在找什麼。祝你好運。

+0

在這裏查看詳情https://github.com/1fabiopereira/tabNavBar/blob/master/dist/unminify/tab_nav_bar.js – 1fabiopereira

+0

請看看答案更新1. –

+0

據我瞭解應該做的,但我需要鏈接函數中的一些值來生成模板並進行一些計算,並且必須在鏈接函數實例化之前分配這些值。有關如何做到這一點的任何建議? – 1fabiopereira