我使用http-auth-interceptor
來詢問用戶身份驗證。我也使用ui-router
來處理我的應用程序的路線。到目前爲止,我有一個CoreController
作爲與ui-router
狀態關聯的頂級控制器:「核心」。如何使用帶指令的http-auth攔截器
來自我的應用程序的所有路由都是此核心狀態的子狀態(這是抽象的)。因此,例如我有core.user
,core.user.show
,core.settings
...
一切工作得很好,直到我加入resolve
參數爲我的路線之一。 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」必須有一個根eleme NT。模塊/用戶/視圖/ login.html的
不知道如何處理這個問題, 乾杯,
馬克西姆
唯一的問題是,我失去了以前的狀態,所以我不知道登錄後要重定向哪個頁面:( – maxwell2022