我有一个带有提供程序的指令,因为可以在同一个应用程序中多次配置此提供程序,并且该指令的每个实例都采用不同配置的值,但该指令的所有实例始终采用相同的配置。我想知道如何解决这个问题?
.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;
};
})
答案 0 :(得分:1)
值得注意的是AngularJS服务总是单身。这意味着,一旦AngularJS构造了一个服务对象,整个应用程序就会重用相同的实例。 因此,多次配置提供程序将更改服务工厂生成的单个实例中的值。因此,所有指令都将获得相同的值而不是私有值。 能否请您提供有关您案件的更多详情?
更新1:
在查看文件后,实现目标的正确方法是使用指令控制器。 link函数将接收控制器实例作为参数:
function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
这样您就可以访问特定于指令实例的配置值。此外,控制器实例在所有指令之间共享,这允许指令将控制器用作通信通道。
我希望这就是你要找的东西。祝你好运。