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) ではないことがわかりました。
プロバイダー インジェクターではなく、インスタンス インジェクターを取得する方法はありますか? コードが実際に実行されると、インスタンス インジェクタが完全に利用可能になると確信しています。私が間違っていたら、私も知りたいです!ありがとう!