|
|
|
AngularJS нетривиальный фильтр
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня. Сижу ломаю голову вот над такой задачкой, переложенной на тестовый пример из AngularJS ng-repeat Есть список друзей, и к нему прикручен какой-то фильтр (в данном случае по всему тексту, из input), но хочется так же фильтровать еще по каким-либо параметрам, например при установке галочки "Только девушки", производить фильтр по gender:'girl', а если галочка не стоит, использовать весь массив Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Так вот, как можно добавить фильтр чтобы он срабатывал только когда чекбокс включен? Кроме варианта с ng-if, так как хотелось бы получить более изящное решение. Использовать сложный фильтр как функцию и передавать значение ng-model="a" параметром, например так <li ng-repeat="friend in results = friends | filter:q | filter:myFunction(a)"> , но тогда как в этой функции получить объект friend который должен проверяться на условие фильтра. Второй вариант очень заманчив, так как можно передавать сразу много параметров и делать очень сложную логику фильтра, но вот все никак не могу придумать как получить текущий friend ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 08:05 |
|
||
|
AngularJS нетривиальный фильтр
|
|||
|---|---|---|---|
|
#18+
Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. Код: html 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 08:18 |
|
||
|
AngularJS нетривиальный фильтр
|
|||
|---|---|---|---|
|
#18+
Да в этом решении можно передать несколько аргументов для работы с ними, но есть и минусы.... 1) каждый следующий фильтр надо добавлять так же к самому модулю 2) самое важное, что в этом варианте сложно получить объекты из $scope Вообще у меня получилось развить эту мыслю и раз и навсегда решить эту проблему. Вот что у меня получилось: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. myFilter2 это пример того, что при работе с исходным вариантом scope не виден, и будет ошибка При работе с myFilter теперь можно передавать любую функцию из scope и передавать в нее любое количество аргументов и эта функция все так же останется в области видимости scope Для работы надо обязательно использовать вот такую конструкцию myFilter: Run (myRuningFunction):argument1:argument2...:argumentN Тогда при вызове данного фильтра, техническая функция Run произведет поиск в scope функции myRuningFunction и вернет её обратно в фильтр После чего в теле фильтра будет вызвана эта функция со всеми переданными аргументами и если функция по результату своей работы вернет true, то этот элемент не исключается. Как-то так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 08:48 |
|
||
|
AngularJS нетривиальный фильтр
|
|||
|---|---|---|---|
|
#18+
не все так просто в нашем королевстве :( Мой вариант тоже не есть хорошее решение. Основных минусов два. Первое, что в данном примере фактически фильт можно применять только в одном месте: так работает: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. так не работает второй фильтр: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. так как при вызове фильтра второй раз аргументы будут переданы какие есть в первом :( Второй минус, это то что данное решение выполняется каждый раз как только что-то меняется в модуле, даже независимое от данного фильтра, так что чтобы не грузить проц надо прописывать проверку, что аргументы в фильтре не изменились. Так что надо еще допились напильником или выкинуть это решение и искать другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2015, 07:15 |
|
||
|
|

start [/forum/topic.php?fid=22&tid=1445944]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 480ms |

| 0 / 0 |
