2015-04-02 38 views
0

有沒有更好的方式來重定向通過一個狀態,而不使用$ urlRouterProvider?我想通過base.home狀態重定向到其他地方。有沒有更好的方式通過使用ui路由器通過狀態重定向?

$stateProvider 
     .state('base', { 
      url: '/base', 
      abstract: true, 
      views: { 
       "mainbase": { 
        templateUrl: 'ng/apps/base/views/header.html', 
        controller: 'HeaderCtrl' 
       } 
      }, 
     }) 
     .state('base.home', { 
      url: '', 
      views: { 
       "baseHeaderView": { 
        template: 'base home, you should not be here', 
        controller: function($state) { 
         // Can this be accomplished better? 
         $state.go('base.elsewhere'); 
        } 
       } 
      } 
     }) 
     .state('base.elsewhere',{ 
      url: '/elsewhere' 
      //I want to redirect to here after going through the base.home state 
     }); 

回答

0

標記您與屬性重定向狀態,然後添加一個全局偵聽$stateChangeStart和有條件取代的過渡。

這樣做的重定向取代原來的轉換,所以'base.home'甚至暫時沒有激活。如果你

app.run($rootScope, $state) { 
    $rootScope.$on('$stateChangeStart', function(evt, toState, params) { 
     if (toState.redirectTo) { 
     evt.preventDefault(); 
     $state.go(toState.redirectTo, params); 
     } 
    }); 
    } 

    app.config(function($stateProvider) { 
     $stateProvider.state('base', { 
      url: '/base', 
      abstract: true, 
      views: { 
       "mainbase": { 
        templateUrl: 'ng/apps/base/views/header.html', 
        controller: 'HeaderCtrl' 
       } 
      }, 
     }) 
     .state('base.home', { 
      url: '', 
      views: { 
       "baseHeaderView": { 
        template: 'base home, you should not be here', 
        controller: function($state) { 
         // Can this be accomplished better? 
         $state.go('base.elsewhere'); 
        } 
       } 
      }, 
      redirectTo: 'base.elsewhere' 
     }) 
     .state('base.elsewhere',{ 
      url: '/elsewhere' 
      //I want to redirect to here after going through the base.home state 
     }); 
    }); 
+0

我需要base.home被激活。 – Xylax 2015-04-03 21:13:52

+0

然後,您應該聽取$ stateChangeSuccess代替。你爲什麼要重定向狀態激活? – 2015-04-03 21:27:05

相關問題