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