2016-07-29 126 views
0

我有一個使用UI-Router和嵌套視圖構建在angularjs中的單頁面應用程序。我的代碼如下所示:Angular UI路由器,解決嵌套視圖

app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider' ,'$mdDateLocaleProvider', '$locationProvider', function ($stateProvider, $urlRouterProvider, $httpProvider, $mdDateLocaleProvider, $locationProvider) { 
var rootpath = config.paths.components; 
$stateProvider.state('home', { 
    url: '/', 
    views: { 
     index: { 
      templateUrl: rootpath + '_root/template.html', 
      controller: "RootController" 
     }, 
     "[email protected]": { 
      templateUrl: rootpath + 'header/header-template.html', 
      controller: "HeaderController" 
     }, 
     "[email protected]": { 
      templateUrl: rootpath + 'sidebar/sidebar-template.html', 
      controller: "SidebarController" 
     }, 
     "[email protected]": { 
      templateUrl: rootpath + 'main/main-template.html', 
      controller: "MainController" 
     } 
    }, 
    resolve: { 
     authorize: ['RootService', function (RootService) { 
     var auth = RootService.getKey(); 
     return RootService.getConfig(auth.key); 
     }] 
    }, 
}); 

$urlRouterProvider.otherwise('/'); 

}]).run(['$rootScope', '$state', '$window', function($rootScope, $state, $window){ 
    $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error){ 
    $window.location = error.status +'.html'; 
}); 

在「home」狀態中,我正在做一個解析,以查看傳入的身份驗證密鑰是否有效。

如果密鑰無效或已過期,$stateChangeError事件捕獲錯誤並將用戶重定向到錯誤頁面。

這適用於應用程序啓動和刷新時的正常工作。

問題是,如果密鑰已過期(僅適用於十分鐘)且應用程序未重新編碼,則事件不會收到錯誤消息。

有關如何解決這個問題的任何想法?

+0

無論在你的代碼,你在哪裏存在本身無效的鍵,你可以嘗試將網頁重定向爲$ window.location的= error.status +」。HTML 「; – atul

回答

0

你可以通過使用角度js提供的$ watch來解決這個問題。

$scope.$watch(function(scope) { return scope.data.myVar }, 
      function() {} 
     ); 

第一個函數是值函數,第二個函數是偵聽器函數。 此示例值函數返回$ scope變量scope.data.myVar。如果此變量的值發生變化,將返回一個不同的值,並且AngularJS將調用監聽器函數。

我想這可能會解決你的問題......

+0

謝謝,這解決了這個問題。 –