2016-04-03 8 views
0

Dies sollte eine sehr einfache Sache sein. Ich baue eine IONIC-App mit einer JSON-Datendatei. Die Daten sind in etwa so.Ionic Get Integer-ID aus JSON-Daten

Jetzt möchte ich nach "Typ" in den Daten filtern und dann die Daten mit "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> 

Der Controller für diese ist:

.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; 
}), 
}]) 

Dies zeigt die erforderlichen Daten von Männern nur dem Namen nach.

Allerdings, wenn ich die einzelnen Bio mit dem folgenden Code

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

Wenn ich die einzelnen Element klicken, um zu sehen möchten für jede Person angezeigt person.bio ich beide John und Mary zu bekommen.‘

Ich dachte, dies lag daran, dass die "ID" 1 und 10 ist, die als eine Zeichenfolge für den Controller zu analysieren scheint. Ich habe versucht, diese

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

hat nicht funktioniert. Ich tat dies in der Steuerung

Dies funktioniert auch nicht. Ich bin total ratlos. Wie bekomme ich die individuellen IDs aus den Daten? In der Tat habe ich bemerkt, dass ich die ID zu 11 oder 12 oder 13 usw. ändern kann und es immer noch beide Datensätze zurückgibt?

Jede Hilfe wird geschätzt.

+0

Können Sie bestätigen, dass '$ scope.whichPerson 'richtig zugeordnet ist? –

+0

Ja, alles funktioniert einwandfrei. Wenn ich den Filter auf "Name" ändere, funktioniert alles gut, aber nicht mit der ID und ich kann nicht herausfinden, warum – boony

+1

@kolli richtig ist, müssen Sie einen Komparator 'Filter hinzufügen: {id: whichPerson}: true', einfach machen sicher '$ scope.whichPerson 'ist eine Ganzzahl, um Ihre json Daten zu entsprechen –

Antwort

2

Versuchen Sie, den Komparator :true zu Ihrem Filter hinzuzufügen, wie in der documentation beschrieben. Dies zwingt zu einem strengen Vergleich des Filterwerts, anstatt nur zu prüfen, ob die Daten ihn enthalten.

+0

Nein, weder "true" noch "strict" funktioniert, True gibt nichts zurück und strict gibt alle Datensätze zurück ... – boony

+0

@boony strict ist kein Schlüsselwort, das ist nur eine Variable, die im Beispiel verwendet wird. Können Sie einen CodePen oder Plunker oder etwas, das dies reproduziert, einrichten? Wenn ich es versuche, funktioniert es gut mit: wahr ... – kolli

+1

Verdammt! Halte deine Pferde. Nach viel Kopfschütteln habe ich eine weitere Fehlerprüfung durchgeführt und festgestellt, dass die 'id' keine Ganzzahl zurückgegeben hat. Ich kehrte zum Testen der ParseInt und dieses Mal hat es funktioniert. Nicht sicher, warum es gestern nicht funktionierte, aber scheint wie Problem ist jetzt gelöst. – boony

0

die oben angegebenen nicht funktioniert, können Sie einen benutzerdefinierten Filter versuchen, indem Sie:

filter: { id: whichPerson }:sameID 

und dann in Ihrem Controller:

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

Auch wenn dies nicht funktioniert, können Sie könnte dann zumindest innerhalb des benutzerdefinierten Filters debuggen, um zu sehen, wo der Vergleich fehlschlägt