在Angular中装饰服务提供商

时间:2015-11-25 21:30:52

标签: angularjs decorator

我正在开发一个库,它扩展了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类。我知道Angular的$provider.decorate()实用程序,但据我所知,它只能用于装饰生成的服务实例,而不是提供者。

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

谢谢!

1 个答案:

答案 0 :(得分: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;
  });
});