http-auth-interceptor
ユーザー認証を求めるために使用しています。ui-router
また、アプリケーションのルートを処理するために使用しています。今までは、「コア」CoreController
という状態に関連付けられた最上位のコントローラーがありました。ui-router
アプリケーションからのすべてのルートは、このコア状態 (抽象的) の子状態です。たとえば、私はcore.user
, core.user.show
, core.settings
, ...を持っています
resolve
ルートの 1 つにパラメーターを追加するまで、すべてがうまく機能していました。core.user
にはresolve
API からデータを要求するパラメーターがあり、ユーザーが正しく認証されていない場合、この API は 401 を返します。
問題は、のリスナーがevent:auth-loginRequired
CoreController (最上位コントローラー) にあることです。これは、子の状態で解決が満たされていないため、ロードされていないため、イベントがトリガーされません。
この CoreController にイベント リスナーを含めることはできないと判断し、このイベントをキャッチするためのディレクティブの実装を開始しました。現時点で私が持っているものは次のとおりです。
ログインモーダルをトリガーするために、この状態を使用していました。
$stateProvider
.state("main.login", {
onEnter: function($stateParams, $state, $modal) {
$modal.open({
templateUrl: "/js/modules/user/views/login.html",
controller: 'LoginController',
backdrop: 'static',
keyboard: false,
windowClass: 'app-modal-login'
}).result.then(function(result) {
if (true == result) {
$state.go("main.home.map.data");
}
});
}
})
;
そして、ここに私が構築しようとしているディレクティブがあります:
require(['app', 'modules/user/index'], function(app) {
app.directive('loginDialog', ['$modal', function($modal) {
return {
templateUrl: 'modules/user/views/login.html',
restrict: 'A',
replace: true,
controller: 'LoginController',
link: function(scope, element, attributes, controller) {
console.log('Directive loaded');
// scope.$on('event:auth-loginRequired', function() {
// element.modal('show');
// });
//
// scope.$on('event:auth-loginConfirmed', function() {
// element.modal('hide');
// scope.credentials.password = '';
// });
}
}
}]);
});
しかし、状態プロバイダーで以前に発生したエラーが発生します。
ディレクティブ 'loginDialog' のテンプレートには、ルート要素が 1 つだけ必要です。モジュール/ユーザー/ビュー/login.html
これを処理する方法がわからない、乾杯、
マキシム