我正在修改一些作为 AngularJS 分析框架插件的代码。在插件中,我想访问$location
本质上是$routeChangeSuccess
处理程序的对象。事件处理程序是在配置函数中定义的,但是当代码实际执行时,我的理解是 $location 应该可用。
以下不起作用:
angular.module('myModule', ['angulartics'])
.config(['$analyticsProvider','$injector', function ($analyticsProvider, $injector) {
$analyticsProvider.registerPageTrack(function (path) {
// The following runs on $routeChangeSuccess
$injector.invoke(['$location',function($location) {
try {
analytics.page({
path: path,
url: $location.absUrl()
});
} catch (e) {
if (!(e instanceof ReferenceError)) {
throw e;
}
}
}]);
});
$analyticsProvider.registerEventTrack(function (action, properties) {
try {
analytics.track(action, properties);
} catch (e) {
if (!(e instanceof ReferenceError)) {
throw e;
}
}
});
}]);
})(angular);
在这种情况下,$injector
找不到$location
服务。在进一步挖掘中,我发现这是因为我拥有的注入器实际上是提供程序注入器(因为这是config
函数给我的)而不是实例注入器(它有$location
)。
有什么方法可以让我获得实例注入器,而不是提供者注入器?我很确定实例注入器在代码实际运行时完全可用。如果我错了,那我也想知道!谢谢!