2016-04-03 5 views
0

これは非常に簡単なことです。私はJSONデータファイルを使ってIONICアプリケーションを構築しています。データはこのようなものです。JSONデータのIonic get整数ID

[ 
    { "id": 1, 
    "name": "John", 
    "type": "male", 
    "bio": "this is John" 
    }, 
    { "id": 10, 
    "name": "Mary", 
    "type": "female", 
    "bio": "this is Mary" 
    } 
] 

ここでデータで "タイプ"でフィルタリングし、データを "id"でループします。

<ion-list ng-repeat="person in people | filter: {'type': 'male'}"> 
    <ion-item href="#tab/people/males/{{ person.id }}">{{ person.name }} 
</ion-item> 
</ion-list> 

このためのコントローラは次のとおりです。

.controller('PeopleController', ['$scope', '$state', '$http', function($scope, $state, $http){ 
$http.get('data/people.json').success(function(data){ 
$scope.people = data; 
$scope.whichPerson = $state.params.id; 
}), 
}]) 

これは名前だけで、男性の必要なデータを表示します。しかし

私は私がジョンとメアリーの両方を取得person.bio表示するには、それぞれの人のために、個々の項目をクリックすると、次のコード

<div class="card" ng-repeat="person in people | filter: { id: whichPerson }"> 
<h2>{{ person.name }}</h2> 
<p>{{ person.bio}}</p> 
</div> 

を使用して個々のバイオを見たい場合は。」

"id"が1と10でコントローラの文字列として解析されているように見えるため、これが原因であると考えました。私はこれを置こうとしました

"id": "1" and "id": "10" 

うまくいきませんでした。私はコントローラでこれを行なった。

$scope.whichPerson = parseInt($state.params.id, 10); 

これはうまくいきません。私は完全に困惑しています。データから個々のIDを取得するにはどうすればよいですか?実際に私はidを11または12または13などに変更することができ、それでも両方のレコードを返すことに気付きましたか?

助けてください。

+0

'$ scope.whichPerson'が正しく割り当てられていることを確認できますか? –

+0

はい、すべて正常に動作しています。私がfilterを "name"に変更した場合、idは正しくないが、なぜ – boony

+1

@kolliが正しいのか分からないので、コンパイラ 'filter:{id:whichPerson}:true'を追加する必要があります。 '$ scope.whichPerson'はあなたのjsonデータと一致する整数です。 –

答えて

2

documentationに記載されているように、コンパレータ:trueをフィルタに追加してください。これにより、データに含まれているかどうかを確認するのではなく、フィルタ値を厳密に比較する必要があります。

+0

いいえ、 'true'も 'strict'も機能しません。Trueは何も返しません。厳密にはすべてのレコードを返します。 – boony

+0

@boony strictはキーワードではなく、例で使用されている変数です。 CodePenやPlunker、またはこれを再現するものを設定できますか?私はそれを試してみると、それは正常に動作します:真実... – kolli

+1

くそー!ホールド。多くのヘッドバンギングの後、私はさらにエラーチェックを行い、「id」が整数を返さなかったと判断しました。私はparseIntを試すことに戻り、今回はそれが機能しました。なぜそれが昨日働いていなかったのか分かりませんが、問題が解決したようです。 – boony

0

上記動作しません、あなたが実行してカスタムフィルタを試みることができる考える:その後、

filter: { id: whichPerson }:sameID 

とあなたのコントローラで:

$scope.sameID = function(actual, expected) { 
     return parseInt(actual) === parseInt(expected) 
    }; 

が、これは動作しない場合でも、比較が失敗した場所を確認するためにカスタムフィルタ内で少なくともデバッグできる可能性があります