2016-06-18 120 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