2016-08-23 44 views
0

你好,我有簡單的login服務看起來像:angularjs,等待認定結果之前,轉到下一個控制器

this.notifyAuthorization = function() { 
    console.log('notifyAuthorization()'); 

    $http({ 
     url: 'app/?cmd=authorization/', 

    }).then(function (response) { console.log('LoginStatusResult: '); console.log(response.data); 
     var data = response.data; 

     if(data.hash !== undefined) { 
      $rootScope.loginStatus= true; 
      hash = data.hash; 
     } 
    }); 
}; 

這裏是呼籲服務

app.run(function($rootScope, $location, LoginService) { 
    LoginService.notifyAuthorization(); 
    console.log('notifyAuthorization Finished'); 
}); 

看到LoginStatusResult我看到之前notifyAuthorization Finished 和其他控制器初始化,應該知道LoginStatus所以如何解決這個問題?還是有更好的做法? 感謝

+0

這是因爲'notifyAuthorization()'是一個異步函數,這意味着它不會阻塞代碼的其餘部分,直到它完成。你可以使用** promises **來解決這個問題。查看[$ q服務](https://docs.angularjs.org/api/ng/service/$q)。 – byxor

回答

2

使用promises,其默認給你的$ HTTP功能:

this.notifyAuthorization = function() { 

    return http({ //notice the return inserted here 
     url: 'app/?cmd=authorization/', 

    }).then(function (response) { console.log('LoginStatusResult: '); console.log(response.data); 
     var data = response.data; 

     if(data.hash !== undefined) { 
      $rootScope.loginState = true; 
      hash = data.hash; 
     } 
    }); 
}; 

,並在您app.run正確地使用它:

app.run(function($rootScope, $location, LoginService) {  
    LoginService.notifyAuthorization().then(function(){ 
     $rootScope.authorized = true;; //executed after your $http request... 
    }); 
}); 

,並在您的html代碼:

<div ng-controller="myController" ng-if="$root.authorized"> 
    <!-- your inner code.. 

     <p>Pellentesque habitant morbi tristique senectus et netus et     
     malesuada fames ac turpis egestas. Vestibulum tortor quam, 
     feugiat vitae, ultricies eget, tempor sit amet, ante. </p>    
    --> 
</div> 

這樣,你的控制器將instantiat只有在.then函數解決後才能編輯

+0

它對我來說也是一樣的,因爲我需要知道控制器初始化之前的LoginStatus –

+0

然後在你的notifyAuthorization函數中添加一個ng-if變量。詳細信息請參閱我的更新答案。 – Luxor001

+0

假設我有一個LoginController,如果'root.authorized'爲TRUE,我不需要調用LoginController,默認情況下'root.authorized'是FALSE,所以它會調用LoginController,然後當Result接收到NG -IF它會隱藏控制器在這種情況下我能做些什麼? –

相關問題