2016-04-03 9 views
0

を$スコープ変数をアクセスすることはできません。は、私は、コントローラで定義された変数を持っている側の機能

app.controller('myController',['$scope','ajaxCall',function($scope,ajaxCall){ 
    $scope.interviewer = {}; 
    ajaxCall.get(/* A url */).then(function(response){ 
    $scope.interviewer = response.data; 
    console.log($scope.interviewer); 
}); 
console.log($scope.interviewer); 

ajaxCallは、AJAX呼び出しを行うために使用されるカスタムサービスです。内部コンソールが正常に動作しています(つまり、完全なデータを表示しています)が、外部コンソールが空のオブジェクトを印刷しています。なぜですか?

答えて

2

AJAXは「非同期」を意味するためです。

then()に渡された関数は、最後のconsole.log()行の後に長い時間を非同期を実行します。これは、非同期HTTP要求への応答がサーバーから戻ってくると実行されます。

同期していた場合は、約束やコールバック機能を気にしません。私達はちょうど

var response = ajaxCall.get(url); 

を行うだろう。しかし、それは不可能ですので、我々は意味

ajaxCall.get(/* A url */).then(function(response){ 

行います。このリクエストを送信してください、と応答が利用可能になったとき、この関数を呼び出します。その間に私はたくさんのことをやります。

+0

ありがとう@JB Nizet。私はこのコンセプトを知っていましたが、それが理由だとは思えませんでした。しかし、コントローラのほとんどの部分でデータを使用する必要がありました。そのためには、その中にたくさんのコードを書くことは望ましくありません。関数。 –

+0

関数 'function init(response){...}'を宣言し、 'ajaxCall.get(url).then(init);'を使用してください。 –