2016-05-30 20 views
0

私は最初のAngularJSアプリケーションに問題があります。私はヨーマンジェネレータを使用しています。私はjsonファイルからデータを取得し、オブジェクトの配列の長さをチェックする必要があります。jsonファイルから適切なデータを取得できませんAngularJS

マイdata.jsonファイル:

{"persons":[ 
    { 
     "firstname":"Christian", 
     "lastname":"Bower", 
     "age":21 
     }, 
     { 
     "firstname":"Anthony", 
     "lastname":"Martial", 
     "age":25 
     } 
]} 

マイ角度コントローラ:

'use strict'; 

     /** 
     * @ngdoc function 
     * @name webdevApp.controller:DataTableCtrl 
     * @description 
     * # DataTableCtrl 
     * Controller of the webdevApp 
     */ 
     angular.module('webdevApp') 
      .controller('DataTableCtrl', function ($scope, $http) { 
      this.awesomeThings = [ 
       'HTML5 Boilerplate', 
       'AngularJS', 
       'Karma' 
      ]; 


      $http.get('../data.json').success(function(data){ 
       $scope.Data = data; 
       $scope.namePerson = $scope.Data.persons[0].firstname; 
      }); 

     console.log($scope.namePerson); 
     console.log($scope.Data.length); 
     }); 

コンソール出力:

1)不定

2)はTypeError:新しい

次の質問で未定義 のプロパティ「長さ」を読み取ることができませんです - どのように私は)以下のように(オブジェクトの配列効果を達成することができますか?

$scope.persons = [ 
    { 
     "firstname": "christian", 
     "lastname": "bower", 
     "age": 21 
    }, 
    { 
     "firstname": "anthony1", 
     "lastname": "martial", 
     "age": 25 
    }]; 

答えて

2

$http.getあなたはこのようなsuccess機能で出力にその結果を持っているのでasyncronous呼び出しです:

 $http.get('../data.json').success(function(data){ 
      $scope.Data = data; 
      $scope.namePerson = $scope.Data.persons[0].firstname; 

      console.log($scope.namePerson); 
      console.log($scope.Data.length); 

      $scope.persons = data.persons; // get your persons array 
     }); 
+0

ありがとうございました!私は内部ですべての操作を行う必要があります。変数を外部で使用するにはどうすればよいですか? .hasOwnPropertyメソッドは配列項目を数える最も簡単な方法でしょうか? – XingD123

+0

@ XingD123、はい、あなたの非同期呼び出し結果に何をしても、それは 'success'ハンドラ(データがロードされた後の意味)で行います。配列項目の数を取得するには、 'length'プロパティを使います。 –

+0

でも、もし私が$ scope.getData = funcion(){$ http.get()....}のようなことをして、後でgetData()関数を呼び出す必要があるのであれば?スクリプト全体で変数に到達する別の方法がありますか? – XingD123

0

$http.get呼び出しが非同期です!

ログをsuccess機能に入れてください。あなたはそこからすべてを取得することができますので、私見あなただけの範囲にdataあるいはpersonsを割り当てる必要があり側の発言として

$http.get('../data.json').success(function(data){ 
    $scope.Data = data; 
    $scope.namePerson = $scope.Data.persons[0].firstname; 

    //assign persons in scope 
    $scope.persons = data.persons; 

    //logs 
    console.log($scope.namePerson); 
    console.log($scope.Data.length); 
}); 

注意。何千もの無駄な変数をスコープに入れてしまうと、望ましくない複雑さが生じる可能性があります。

関連する問題