2016-08-01 5 views
-2

私はAngular 1.5を使用しています。anguar 1.5スコープなしでhttp.getのデータにアクセスする

http.getからhttp.getに自分のデータにアクセスできません。私に説明してみましょう :

私は私のコンポーネントを持っている:

(function(){ 
'use strict'; 
class myComponent { 
    constructor(
     $http, 
     $scope) 
    { 
     var self = this; 
     self.test="this is a test"; 
     $http.get(MYAPI).then(function(response){ 
     self.MYDATA = response.data; 
     console.log(self.MYDATA) 
     }); 
     console.log(self.test) 
     console.log(self.MYDATA) 
    } 

} 
angular.module('myApp') 
.component('myApp.test', { 
    templateUrl: 'myTemplate.html', 
    controller: myComponent, 
    controllerAs:'vm', 
}); 
})(); 

にconsole.logは私を与える:

が、これはテストです - テスト

未定義のために> - > http://www.web.get

Object {id:1 ...} - > http.get

私はhttp.getから自分のデータにアクセスすることはできません。これは私が望むものです。

アイデアをお持ちですか? ありがとうございます。

+0

要求は非同期であるため、割り当てはまだ行われていません。ログの順序でこれを見ることができるはずです...コールバック内のものが読み込み可能な順序の最初のものであるにもかかわらず、起動する最後のものであることに気づくでしょう – aw04

+0

そうです、気づいていない、ありがとう。コントローラにデータを使用する手掛かりはありますか? – Wandrille

答えて

0

$http.getは、プログラムの実行がサーバーからデータをフェッチするのを待機しない非同期呼び出しです。

したがって、が$http.get()の外にあるときは、サーバーからデータが取り出されていないため、undefined errorが得られます。

この問題を解決するためのまたは非同期呼び出しを処理するために、あなたはこのような何かを行うことができます:

var promise = $http.get(MYAPI); 

その後、コールバックの助けを借りて、以下の方法でデータにアクセスします。

promise.then(
      function successCallBack(response) 
       { 
        self.MYDATA = response.data; 
        console.log(self.MYDATA) 
       } 
      ).then(
       function errorCallBack(response) 
       { 
        console.log(response); 
       }   
      ); 

ここれますあなたに役立つかもしれないcallbacksの素敵な記事!

+0

それは働いています、ありがとうございます。しかし、なぜ私は子供のコンポーネントでそれを持つことができないのか分からない。子コントローラではself.testにアクセスできますが、self.MYDATAにはアクセスできません。しかし、おそらくこの質問は関連していません。私は子供の約束を送ってから約束をしなければならないのですか?または、自分のデータを直接送信することは可能ですか.MYDATA? – Wandrille

+0

promiseを 'global'変数として宣言すると、コールバックの助けを借りてスクリプト全体で' response'にアクセスすることができます。または、サービスを作成した子コンポーネントの代わりに 'response'を引数として送ることができますサービスコールが同期しているので動作します – varunsinghal65

+0

ありがとうございます。それが私を助けてくれました – Wandrille

関連する問題