在角

2015-11-25 18 views
4

装饰服务提供者我正在扩展一些功能在ui.router建立了集应用程序状态的库。目前,我在我的库中定义一个新的提供者来管理这个(我们称之为enhancedState)形式:在角

myApp.provider('enhancedState', EnhancedState); 

EnhancedState.$inject = ['$stateProvider']; 
function EnhancedState ($stateProvider) { 
    this.$stateProvider = $stateProvider; 
} 
EnhancedState.prototype = { 
    /* fun new methods that wrap $stateProvider */ 
    $get: ['$state', function ($state) { 
    /* maybe wrap some $state functionality too */ 
    return $state; 
    } 
}; 

然后我就可以用我的enhancedStateProvider在我的应用程序配置做以下的扩展功能有趣的新状态定义我的图书馆。

我宁愿但是,直接装点$stateProvider类。我知道角的$provider.decorate()实用的,但据我所知,它只能用来装饰生成的服务实例,而不是供应商。

有没有人成功地用它来装饰供应商,或者是知道类似的机制在角1.x中这样做的?

谢谢!

回答

5

你需要AngularJS decorators(找到decorator法)。检查this plunker示例。根据this所以发表。

例子:

app.config(function($provide) { 
    $provide.decorator('$state', function($delegate) { 
    $delegate.customMethod = function(a) { 
     console.log(a); 
    }; 
    return $delegate; 
    }); 
}); 
+0

正确的,只是它应该是'$ provide.decorator( '$状态',...' – dfsq

+0

Woops更新我不知道'$ state'提供什么。不知道我应该注入与'Provider'后缀提供商创造的东西。主要观点是:使用'$ provide.decorator' :) –

+2

嘿,这实际上是我想的第一件事,但对我来说我不我想装饰'$ state',我想修饰'$ stateProvider',它是创建'$ state'的对象。这是我无法找到一种方法来调和'$ provide.decorator' – cmw