2016-07-26 7 views
0

Angular Tree Controlを使用してツリーを構築しています。データソースとしてjsonファイルを使用したいと思います。角度ツリーコントロールを作成するときにjsonをデータソースとして使用

パスが(正しいはずの私の唯一の2つのファイルがあります。これは、私のHTMLタグ

<treecontrol class="tree-classic" 
    tree-model="treedata" 

であり、これはオブジェクト

var JSON; 
$.getJSON('data.json', function(response){ 
    JSON = response; 
    alert(JSON.property); 
}); 
$scope.treedata = JSON; 

としてJSONファイルを取得するために私のjavascriptのコードです同じフォルダ内にindex.htmldata.jsonの両方があります)。私のjsonファイルの内容を取得し、それを変数に貼り付けてオブジェクトを取得するだけで動作します。しかし、ファイルを読むと、私のJSON変数が空であるとの警告が表示されます。

この問題を解決する方法がありますか?どうもありがとうございました。


コールバックのアイデア次の更新

、私はこの解決策を見つけました。

$.getJSON('data.json', function(response){ 
    $scope.$apply(function() { 
     $scope.treedata = response; 
    }); 
}); 

これを行うより良い方法はありますか?

+0

なぜ 'alert(JSON.property)'が使われているのですか?なぜ警告(JSON)だけではないのですか? –

答えて

1

$scope.treedata$.getJSONが完了する前に割り当てられます。バインディングを更新するために、あなたは$scope.$applyを使用することができ

$.getJSON('data.json', function(response){ 
    $scope.$apply(function() { 
     $scope.treedata = response; 
    }); 
}); 

が、$httpを注入することを忘れてはいけない代わりに$.getJSON

$http.get('data.json').then(function(response){ 
    $scope.treedata = response.data; 
}); 

$httpサービスを使用することをお勧めし:あなたは成功コールバックでそれを行う必要があります最初に

+0

私はしようとしましたが、空のツリーしかありませんでした。ツリーが正しくデータを持っているようですが、表示されません。しかし、もし私がそれにjsonオブジェクトを与えると、それは現れます。 :S –

+0

いくつかの情報を追加しました。コールバックは役に立ちましたが、それだけでは不十分でした。私の '$ scope。$ apply'よりもうまくいく方法がありますか? –

+0

はい、jqueryの代わりに '$ http'サービスを使うことができます –

関連する問題