2016-04-03 18 views
0

Это должно быть очень простой задачей. Я создаю приложение IONIC с файлом данных JSON. Данные - вот что.Ионный идентификатор целых чисел от данных JSON

[ 
    { "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; 
}), 
}]) 

Это отображает необходимые данные самцов только по имени.

Однако, если я хочу, чтобы увидеть отдельные био используя следующий код

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

Когда я нажимаю отдельный элемент для каждого человека, чтобы показать person.bio я как Джон и Мэри.

Я понял, что это было потому, что «id» равен 1 и 10, который, по-видимому, разбирается как строка с контроллером. Я постарался поставить это

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

Не работает. Я сделал это в контроллере

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

Это также не работает. Я полностью в тупике. Как получить индивидуальный идентификатор от данных? На самом деле я заметил, что я могу изменить идентификатор до 11 или 12 или 13 и т. Д., И он все равно возвращает обе записи?

Любая помощь приветствуется.

+0

Можете ли вы подтвердить правильность присвоения $ scope.whichPerson'? –

+0

Да, все работает правильно. Если я сменю фильтр на «имя», все будет работать отлично, но не с идентификатором, и я не могу понять, почему – boony

+1

@kolli прав, вам нужно добавить фильтр-компаратор: {id: whichPerson}: true', просто сделайте sure '$ scope.whichPerson' является целым числом в соответствии с вашими данными json –

ответ

2

Попробуйте добавить компаратор :true к вашему фильтру, как описано в documentation. Это приводит к строгому сопоставлению значения фильтра вместо того, чтобы просто проверять, содержат ли данные.

+0

Нет, ни истина, ни строгие работы True не возвращает ничего и строит возвращает все записи ... – boony

+0

@boony strict - это не ключевое слово, это просто переменная, используемая в примере. Можете ли вы создать CodePen или Plunker или что-то, что воспроизводит это? Когда я пытаюсь, он отлично работает с: true ... – kolli

+1

Черт! Держи своих лошадей. После долгих ударов головой я сделал еще одну проверку ошибок, и я решил, что «id» не возвращает целое число. Я вернулся, чтобы попробовать parseInt, и на этот раз он сработал. Не уверен, почему он не работал вчера, но похоже, что проблема решена. – boony

0

Учитывая выше не работает, вы можете попробовать пользовательский фильтр, выполнив:

filter: { id: whichPerson }:sameID 

, а затем в контроллере:

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

Даже если это не сработает, мог бы, по крайней мере, отлаживать внутри настраиваемого фильтра, чтобы увидеть, где происходит сбой сравнения.

Смежные вопросы