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