2016-01-06 2 views
0

Я вытаскиваю 2 части данных из базы данных. Каждый возвращается в виде массива объектов JSON, хранится в угловых переменных $ области видимости, и выглядеть следующим образом:Настройка углового фильтра: истина не работает

$scope.data = 
[{ code: 1, text: cat }, 
{ code: 2, text: dog }, 
{ code: 10, text: cow }] 

$scope.data2 = 
[{ code1: 1, code2: F1, text: meow}, 
{ code1: 2, code2: F2, text: woof}, 
{ code1: 3, code2: F10, text: moo}] 

$scope.data быть точным является массивом из 11 объектов, где code: поле для каждого объекта 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12. $scope.data2 представляет собой массив из 100 объектов, где поле code2: может быть F1, F2, F3, F4, F5, F6, F7, F8, F10, F11, F12.

Я тогда есть два HTML <select> элементов, как заселенных этих два массивов и выглядеть следующим образом:

Option 1<select data-ng-model="dataCode" data-ng-options="a.code as a.text for a in data"></select> 
Option 2<select data-ng-model="data2Code" data-ng-options="a.code1 as a.text for a in data2 
| filter: { code2: 'F' + dataCode }"></select> 

Функциональность Я пытаюсь достичь этого, при выборе элемента из $scope.data , он фильтрует, какие элементы отображаются в $scope.data2 на основе кода. Эта логика работает, однако это только фильтры подстроки. т. е. если вы выберете cat, который имеет код 1, фильтр вернет мяу, а также moo, потому что код moo - F10, а F1 - подстрока F10.

Я хочу фильтровать в точном соответствии. Поэтому я искал stackoverflow и обнаружил пару других вопросов людей, которые задавали одно и то же. Принятый ответ был в основном одинаковым для всех: добавьте компаратор :true к фильтру. Однако, когда я попробовал это и изменил его на filter: { code2: 'F' + dataCode } : true, фильтр соответствует 0 результатам, и я получаю пустой <select> выпадающий список без выбора. Установка его в false или просто удаление компаратора исправляет проблему, но тогда это не точное совпадение.

Я попытался переключиться на использование <option> элементов вместо ngOptions, но безрезультатно. Я подумал, что, возможно, это связано с тем, что я смешиваю строку с номером ('F' + dataCode) в фильтре, поэтому я попытался использовать dataCode.toString(), но это тоже не сработало. Может ли кто-нибудь понять, что я делаю неправильно, или помочь мне создать настраиваемый фильтр, если это невозможно исправить?

+0

Его работа для меня http://plnkr.co/edit/9FjFAyvC1wTQ2hRaUzNr?p=preview. Какую угловую версию вы используете? Я также заметил, что у вас нет котировок в ваших значениях свойств 'code2' и' text' в ваших данных. – PrinceG

ответ

1

Если вы считаете, что проблема связана с вашим фильтром, то, основываясь на docs, вместо использования true напишите функцию компаратора и сделайте свое свободное сравнение. Если это не приводит к ожидаемому поведению, то ваша проблема лежит где-то в другом месте, что невозможно решить без функционального примера вашего кода.

+0

Это не было реальным решением моей проблемы, но я отмечаю это как ответ, потому что это помогло мне понять, что Я поступал неправильно. После попытки написать свою собственную функцию компаратора, я заметил, что к аргументам ничего не передавалось. Именно тогда я вернулся к своим элементам «». В моем вопросе я написал 'data-ng-model =" data2Code "', но в моем исходном коде у меня нет модели. Очень элементарная ошибка. – bscott

+0

Рад, что я мог помочь :) –

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