2016-07-01 3 views
1

私はJSONファイルを取得し、その内容を$ scopeに添付しようとしています。AngularJSがデータを返さないようにリクエストします

最初のconsole.logは必要な結果を返しますが、2番目の数値はundefinedを返します。

これを書き込んでデータを保存する正しい方法は何でしょうか?

'use strict'; 

var myApp = angular.module('myApp.view1', ['ngRoute']); 

myApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/view1', { 
    templateUrl: 'view1/view1.html', 
    controller: 'View1Ctrl' 
    }); 
}]); 


myApp.controller('View1Ctrl', [ 

    '$scope', 
    '$http', 

    function($scope, $http) { 
    $http.get('view1/info.json') 
    .then(function(res){ 
     $scope.data = res.data.info 
     console.log($scope.data) 
    }); 

    console.log($scope.data) 
}]); 
+1

'$ http'であるため、データが(コントローラ範囲内)....ではなく、あなたの最後の'はconsole.log() 'の実行後まで保存されています非同期で完了するまでに時間がかかります。あなたは何をしたいのですか? – charlietfl

+0

私はjsonファイルをつかみ、その情報を$ scopeに保存したいので、関数で使用することができ、内容の一部をビューに入れることができます – IAmAkittycatAMA

+0

コードを設定した方法で表示することができます。それがビューで動作していない場合、問題はビューコード内にあるか、データ構造を正しく理解していません。 – charlietfl

答えて

0

これはPromisesと呼ばれる理由があります。私は間違いなくそれらを調べている。

$http.get('view1/info.json') 

私はJSONデータを取得したいのjavascriptを伝えます:ここでの順序で何が起こるかの一種です。しかし、実際にはまだそれを取得していません。その後、コンソールログを実行します。

console.log($scope.data) 

Well $ scope.dataは未定義です。何もまだそれを設定していない!その後、javascriptは実際にJSONデータを取得します。データを取得すると、then内の関数が呼び出されます。この後、

$scope.data = res.data.info 
console.log($scope.data) 

$scope.dataはなぜこのconsole.log作品である、定義されています。詳細情報をお約束します!ここで

は良い出発点である:https://www.youtube.com/watch?v=wA0gZnBI8i4

+0

ありがとう、それは意味があります。リンクありがとう – IAmAkittycatAMA

1

AngularJSの$http.get()then()コールバックが非同期的に呼び出されます。

つまり、コールバックでは機能しますが、2番目のコールバックでは機能しません。

0

あなたのデータは保存されています。しかし、2番目のconsole.log()が実行された時点ではありません。 "then"約束/コールバックは、の2番目のconsole.log()の後にで実行されます。テンプレートに$ scope.dataが必要な場合、これはうまくいくはずです。角度のダイジェストサイクルは、$ httpsのコールバックの後に実行されます。

関連する問題