提供商食谱

时间:2016-06-18 00:39:44

标签: angularjs angularjs-directive ionic-framework

我有一个带有提供程序的指令,因为可以在同一个应用程序中多次配置此提供程序,并且该指令的每个实例都采用不同配置的值,但该指令的所有实例始终采用相同的配置。我想知道如何解决这个问题?

   .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 个答案:

答案 0 :(得分:1)

值得注意的是AngularJS服务总是单身。这意味着,一旦AngularJS构造了一个服务对象,整个应用程序就会重用相同的实例。 因此,多次配置提供程序将更改服务工厂生成的单个实例中的值。因此,所有指令都将获得相同的值而不是私有值。 能否请您提供有关您案件的更多详情?

更新1:

在查看文件后,实现目标的正确方法是使用指令控制器。 link函数将接收控制器实例作为参数:

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

这样您就可以访问特定于指令实例的配置值。此外,控制器实例在所有指令之间共享,这允许指令将控制器用作通信通道。

我希望这就是你要找的东西。祝你好运。