【问题标题】:Decorating a service provider in Angular在 Angular 中装饰服务提供者
【发布时间】:2016-02-28 20:20:18
【问题描述】:

我正在开发一个库,该库扩展了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 中有类似的机制来做到这一点?

谢谢!

【问题讨论】:

    标签: angularjs decorator


    【解决方案1】:

    你需要AngularJS decorators(找到decorator方法)。检查this plunker 示例。基于this所以发帖。

    例子:

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

    【讨论】:

    • 正确,应该是$provide.decorator('$state', ...
    • 糟糕。更新。我对$state 提供者一无所知,也不知道我应该用Provider 后缀注入作为提供者创建的东西。重点是使用$provide.decorator :)
    • 嘿,这实际上是我尝试的第一件事,但就我而言,我不想装饰$state,我想装饰$stateProvider,这是创建@987654332的对象@。这是我找不到与$provide.decorator和解的方法@
    • 关于这个问题的任何信息?
    • 你将如何装饰$stateProvider(正如 OP 所要求的那样)?
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多