【问题标题】:Decorating a service with a method that uses $http使用使用 $http 的方法装饰服务
【发布时间】:2015-04-15 15:28:50
【问题描述】:

我正在尝试用另一种方法装饰服务。问题是该方法使用$http,我无法将其注入angular.config 块,因为它尚未初始化。

我想我可以通过使用 $injector 来解决这个问题,因为这只会在我添加的方法被调用时运行,但这会导致错误:

Error: [$injector:unpr] Unknown provider: $http

这是我正在尝试做的一个示例:

angular.module('someModule', [])

.config(($provide, $injector)->  
  $provide.decorator('someService', ($delegate)->   
    $delegate.newMethod = ()->
      $http = $injector.get('$http')
      $http.get('someURL')
    return $delegate
  )
)

稍后,只有当我调用someService.newMethod() 时,我才会收到上述错误。

有什么办法可以做我想做的事吗?

【问题讨论】:

  • 你不应该也将$injector 注入装饰器吗?
  • 我可能应该将$injector 注入移到那里,但我认为它不会产生影响,因为它仍然可以通过闭包获得。
  • 我认为这将为您解决问题,不知道为什么,但关闭似乎不起作用。
  • 你是对的!谢谢!如果您想发布包含该信息的答案,我会接受。
  • 很好用!

标签: angularjs angular-decorator


【解决方案1】:

显然$injector 也需要注入到装饰器中,所以这将解决它:

angular.module('someModule', [])

.config(($provide, $injector)->  
  $provide.decorator('someService', ($delegate, $injector)->   
    $delegate.newMethod = ()->
      $http = $injector.get('$http')
      $http.get('someURL')
    return $delegate
  )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2011-06-11
    • 2019-02-13
    • 2012-08-18
    • 2020-01-11
    • 2017-11-01
    • 2012-05-09
    相关资源
    最近更新 更多