0
我試圖將第一次登錄頁面的用戶指向設置頁面來做一些配置工作(如果它是現有用戶,他們將像往常一樣回到主頁),如果他們是第一次使用用戶,我也需要禁用頁面中的所有其他鏈接,除非他們完成了這些設置。這是我的嘗試,但由於某些原因,它不起作用,請您爲我指出?非常感謝。如何重定向頁面並禁用angularJS中的其他路由器?
angular.module('ecom').config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
var expenseModalInstance;
$urlRouterProvider.otherwise("/home");
$stateProvider.state('home', {
url: '/home',
templateUrl: 'home/home.html'
}).state('reports', {
url: '/reports',
templateUrl: 'submitter/reports/report-list.html'
}).state('ebin', {
url: '/ebin',
templateUrl: 'submitter/ebin/ebin-expense-list.html'
})..state('accountsetting', {
url: '/account',
templateUrl: 'settings/settings.html'
}).state('accountsetting.security', {
url: '/security',
templateUrl: 'settings/security/security.html',
resolve:{
userInfor: ['$stateParams', 'userinfoservice', function($stateParams, userinfoservice){
var isFirstTime;
if ($stateParams.rid) {
userinfoservice.getUserinfo($stateParams.rid).then(function(data) {
isFirstTime = data.isFirstTimeLogin;
});
}
return isFirstTime;
}]
}
}).run(['$state','$rootScope', function($state,$rootScope) {
// var isFirstTimeUser = false;
// userinforservice.getUserInformation().then(function(data){
// isFirstTimeUser = data.isFirstTimeUser;
// $rootScope.$broadcast('session:resolved', isFirstTimeUser);
// });
var isFirstTimeUser = true;
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
event.preventDefault();
if(isFirstTimeUser){
$state.go('accountsetting');
}else{
$state.go('home');
}
});
}]);
正如你可以看到,如果是新用戶,我會帶他們去accountsetting.security,我有決心呼叫服務器,以獲得該用戶的信息,如果isFirstTime返回true,我會做一些設置安全控制器,還需要禁用所有其他路由器,如報告,ebin等。這是一種方法嗎?或者完成這個任務的好主意?
嘿謝謝老兄!它真的給了我一個主意,讓我試試看! – linyuanxie
它在控制檯中給了我一個這樣的錯誤:angular.js:11706RangeError:超出了最大調用堆棧大小。我只是更新了代碼, – linyuanxie
是的,當然它會給你這個錯誤,因爲你創建了一個無限循環。 '$ state.go'每次都會觸發'$ stateChangeStart'事件,所以你一次又一次地執行同一個監聽器。如果isFirstTime而不是nextState.name是'accountsetting.security',那麼您只應該重定向到'accountsetting.security'。 – frankies