2016-11-03 4 views
0

$ filterを使用してコントローラ内のJSONファイルから取得したデータセットをフィルタリングしようとしています。

[{ 
    "keyword": "key1", 
    "path": "path1" 
}, { 
    "keyword": "key2", 
    "path": "path2" 
}, { 
    "keyword": "key3", 
    "path": "path3" 
}, { 
    "keyword": "key4", 
    "path": "path4" 
}, { 
    "keyword": "key5", 
    "path": "path5" 
}] 

それから私はこのように私のコントローラ内のデータを取得:

$http.get('/sampleJson.txt').then(function (response) { 
    vm.resultSet=response.data; 
}); 

、その後、私は、データをフィルタリングする$フィルターを使用します。ここで はJSONファイル内のデータがある

vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"}); 

最後に、私は、ビューのデータを表示するにはNG-繰り返し使用:

<tbody> 
    <tr ng-repeat="result in vm.results"> 
    <td><a href="{{result.path}}">{{result.keyword}}</a></td> 
    <td>{{result.keyword}}</td> 
    </tr> 
</tbody> 

しかし、結果変数は空で、何も表示されません。かなり基本的なものですが、何が間違っているのか分かりません。 PS:私はのように、コントローラ内の他の変数を宣言する場合:

vm.message="Hello, Angular!" 

はそれがビューに表示されます。

答えて

2

、これを試してみてください、.then非同期です。このソリューションのフィルターが機能します。あなたは、VM使用する理由私は知らないが、$ HTTPサービスはasincronously動作し、ライン

vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"}); 

が、その後()関数の本体である必要があります。ここで

はplunk

https://plnkr.co/edit/gwx90oN0cf62JuUF5t2k?p=preview

1

$httpは、私は$スコープを使用してソリューションを書いた(vm.resultSet=response.data;)実行(promiseが解決得るとき)vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"});

$http.get('/sampleJson.txt').then(function (response) { 
    vm.resultSet=response.data; 
    vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"}); 
}); 
+0

うんあなたは正しいです。もうちょっと前に投稿されたので、私は解決策として他の答えを受け入れました。ありがとう – MehdiB