1

我正在修改一些作为 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)。

有什么方法可以让我获得实例注入器,而不是提供者注入器?我很确定实例注入器在代码实际运行时完全可用。如果我错了,那我也想知道!谢谢!

4

0 回答 0