2016-03-01 44 views
0

我想用戶重定向到一些國家,我從API調用得到這樣的:角API調用stateChangeStart

$scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ 
      event.preventDefault(); 
      AppService 
       .currentState() 
       .success(function(data) { 
         $state.transitionTo(data.pageName, null, {notify:false}); 
       }); 
     }); 

這會使URL正確改變,但頁面不會被渲染。任何想法爲什麼?

我即使沒有API調用試圖像

$scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ 
       event.preventDefault(); 
       $state.go('app.home', null, {location: true, notify:false}); 
    }); 
+0

如果URL的變化,但該頁面沒有得到渲染我猜你模板定義有一些問題。你能告訴我們** app.home **狀態的定義和你的視圖結構嗎? –

+0

Bro每當你打電話給$ state.go時,它都會循環播放它來到$ stateChangeStart並且它阻止它去做它的東西 –

+0

@SiddharthPandey不!注意'notify:false'告訴ui-router不要廣播$ stateChangeStart和$ stateChangeSuccess事件。來源:[$ state.go文檔](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stategoto--toparams--options)。 –

回答

0

使用$state.go(),而不是使用$state.transitionTo()

$state.go(data.pageName, null, {notify:false}); 
+0

我試過,但結果相同... – Gatekeeper

+0

@Gatekeeper,在控制檯上的任何錯誤? –

+0

不,沒有: -/state.go用正確的狀態名稱調用,但沒有任何反應 – Gatekeeper

-2
app.run(function ($rootScope, $location, Data) { 

$rootScope.$on("$stateChangeStart", function (event, next, current) { 
    $rootScope.authenticated = false; 

    Data.get('auth/check_session').then(function (results) { 

    if (results.uid) 
    { 
     $rootScope.authenticated = true; 
     $rootScope.uid = results.uid; 

     var nextUrl = $location.path(); 

     if (nextUrl == '/signup' || nextUrl == '/signin' || nextUrl == '/forgot-password') { 
     $location.path("/dashboard"); 
     } 
    } 
    else 
    { 
     //var nextUrl = next.originalPath; 
     var nextUrl = $location.path();//next.$location.originalPath; 

     if (nextUrl == '/signup' || nextUrl == 'app/signin') { 
     } 
     else 
     { 
     $location.path("/signin"); 
     } 
    } 
    }); 
}); 

}); 
相關問題