我知道这是一个老问题,但我也遇到了这个问题,并找到了一个更优雅的解决方案,可能会对某人有所帮助。请注意,我的示例是用咖啡脚本编写的。
maklemenz 使用该$injector
服务是正确的,但它应该隐藏在您的提供程序代码中:
angular.module("myModule").provider "myService", () ->
defaultCallback = () ->
this.setDefaultCallback = (callback) ->
defaultCallback =
this.$get = ["$injector", ($injector) -> {
#...service code...
#when you want to invoke your callback:
$injector.invoke defaultCallback
#...more service code...
}]
return this
这种方法的主要优点是您可以在回调中使用任何正常的角度注入符号:
#using implicit injection (not minification-safe!)
angular.module("myApp").config (myServiceProvider) ->
myServiceProvider.setDefaultCallback ($log) ->
$log.log "some message"
这是最简单的使用$injector.invoke
方法。它提供了很大的灵活性,因此非常值得查看它的文档。