0

我使用http-auth-interceptor來詢問用戶身份驗證。我也使用ui-router來處理我的應用程序的路線。到目前爲止,我有一個CoreController作爲與ui-router狀態關聯的頂級控制器:「核心」。如何使用帶指令的http-auth攔截器

來自我的應用程序的所有路由都是此核心狀態的子狀態(這是抽象的)。因此,例如我有core.usercore.user.showcore.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的

不知道如何處理這個問題, 乾杯,

馬克西姆

回答

0

而是試圖執行的指令,我只是重定向到內部的模態登錄狀態,它看起來像運行良好;)

require(['app'], function(app) { 
    app.directive('loginDialog', ['$state', function($state) { 
     return { 
      restrict: 'A', 
      replace: true, 
      link: function(scope, element, attributes, controller) { 
       scope.$on('event:auth-loginRequired', function() { 
        $state.transitionTo('main.login'); 
       }); 
      } 
     } 
    }]); 
}); 
+0

唯一的問題是,我失去了以前的狀態,所以我不知道登錄後要重定向哪個頁面:( – maxwell2022