2016-07-29 85 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

谢谢,这解决了这个问题。 –