使用angularjs的但頁面應用時,由於是本地路由在控制頁面跳轉,但是有的時候我們需要判斷用戶是否登錄來判斷用戶是否能進入界面。
angularjs是mvc架構所以實現起來很容易也很靈活,我們只MainController里增加一個路由事件偵聽並判斷,這樣就可以避免未登錄用戶直接輸入路由地址來跳轉到登錄界面地址了
代碼中的 $rootScope.user是登錄后把用戶信息放到了全局rootScope上,方便其他地方使用,$rootScope.defaultPage也是默認主頁面,初始化的時候寫死到rootScope里的。
1 |
$rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){ |
另外還有用戶已經登錄,但是登錄超時了,還有就是增加后台接口的判斷來增強安全性。不能完全依靠本地邏輯
我們在model里面增加一個用戶攔截器,在rensponseError中判斷錯誤碼,拋出事件讓Contoller或view來處理
1 |
app.factory('UserInterceptor', ["$q","$rootScope",function ($q,$rootScope) { |
別忘了要注冊攔截器到angularjs的config中哦
1 |
app.config(function ($httpProvider) { |
最后在controller中處理錯誤事件
1 |
$rootScope.$on('userIntercepted',function(errorType){ |
最后還可以在loginController中做更多的細節處理
1 |
// 如果用戶已經登錄了,則立即跳轉到一個默認主頁上去,無需再登錄 |
另外在登錄成功回調后還可以跳轉到上一次界面,也就是上面記錄的from
1 |
var from = $stateParams["from"]; |
原文請戳: http://www.brafox.com/post/2015/javascript/angularjs/angularjs-router-interceptor.html