Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
47
rated 0 times [  54] [ 7]  / answers: 1 / hits: 27041  / 10 Years ago, mon, november 24, 2014, 12:00:00

THE SITUATION:



I have an angular app using angular ui-select to search and select people from a database.



It is working fine, except one thing.
The user should be able to filter among the people using two criteria: name and email.



Using the normal angular filter I am able to filter only one of them.
If I try to filter both fields, it does not work anymore.





WORKING EXAMPLE WITH ONE FIELD:



 <ui-select multiple ng-model=database_people.selectedPeople theme=select2 ng-disabled=disabled style=width:100%>

<ui-select-match placeholder=Select person...>{{$item.name}} &lt; {{$item.email}} &gt;</ui-select-match>

<ui-select-choices repeat=person2 in list_people | filter: {name: $select.search, db_data_type_id: 5}>

<div ng-bind-html=person2.name | highlight: $select.search></div>

<small>
email: <span ng-bind-html=''+person2.email | highlight: $select.search></span>
</small>

</ui-select-choices>

</ui-select>





NOT WORKING EXAMPLE WITH TWO FIELDS IN THE FILTER:



 <ui-select multiple ng-model=database_people.selectedPeople theme=select2 ng-disabled=disabled style=width:100%>

<ui-select-match placeholder=Select person...>{{$item.name}} &lt; {{$item.email}} &gt;</ui-select-match>

<ui-select-choices repeat=person2 in list_people | filter: {name: $select.search, email: $select.search, db_data_type_id: 5}>

<div ng-bind-html=person2.name | highlight: $select.search></div>

<small>
email: <span ng-bind-html=''+person2.email | highlight: $select.search></span>
</small>

</ui-select-choices>

</ui-select>


The strange thing is that it actually works BUT only for the first character.
When I type the first character it highlights it in both fields, name and email.
But when I type the second character it does not work anymore
(I got no error in console).






ATTEMP USING PROPSFILTER FROM ANGULAR SAMPLES:



 <ui-select multiple ng-model=database_people.selectedPeople theme=select2 ng-disabled=disabled style=width:100%>

<ui-select-match placeholder=Select person...>{{$item.name}} &lt; {{$item.email}} &gt;</ui-select-match>

<ui-select-choices repeat=person2 in list_people | propsFilter: {name: $select.search, email: $select.search, db_data_type_id: 5}>

<div ng-bind-html=person2.name | highlight: $select.search></div>

<small>
email: <span ng-bind-html=''+person2.email | highlight: $select.search></span>
</small>

</ui-select-choices>

</ui-select>


In this case it broke completely, there is no data anymore in the select2 and I get some errors in the console:



Cannot read property 'toString' of null

Cannot read property 'length' of undefined





THE QUESTION(S):



How can I filter among mulitple fields?
Can I do that using normal filter?
Or I have to use a custom filter?
But in this case, why is not working properly?



Thank you very much!


More From » angularjs

 Answers
13

Maybe it's because the same value($select.search) is used for both filters email and name.



<ui-select-choices repeat=person2 in list_people | filter: {name: $select.search, email: $select.search, db_data_type_id: 5}>
...


This will also explains, why it only works with the first character.



Use separate values for each filter to fix this:



<ui-select-choices repeat=person2 in list_people | filter: {name: $select.search.name, email: $select.search.email, db_data_type_id: 5}>
...

[#68723] Thursday, November 20, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kayden

Total Points: 546
Total Questions: 102
Total Answers: 95

Location: Virgin Islands (U.S.)
Member since Fri, Mar 4, 2022
2 Years ago
;