Как передать входные значения в качестве аргументов в пользовательский фильтр в Angularjs

0

Я хочу передать два аргумента в пользовательский фильтр " from" и "to" в пользовательский фильтр, который я создал в моем контроллере.

Здесь вы можете увидеть мой собственный фильтр, который я создал:

    vm.filterMinutes = function (prop, from, to) {
        return function (item) {
            return item[prop] >= from && item[prop] <= to;
        };
    };

И вид выглядит так:

<label>Search from: <input ng-model="fromMinutes"></label>
<label>Search from: <input ng-model="toMinutes"></label>

    <tr style="cursor: pointer;" ng-repeat="student in AdminReportsWorksnaps.data | filter: AdminReportsWorksnaps.filterMinutes('totalMinutes', fromMinutes,toMinutes)">
                <td>{{ student.studentId }}</td>
                <td>{{ student.firstName }}</td>
                <td>{{ student.lastName }}</td>
                <td>{{ student.municipality }}</td>
                <td class="total success">{{ student.totalMinutes | number}}</td>
   </tr>

По какой-то причине это не работает. Ну, если я filter: AdminReportsWorksnaps.filterMinutes('totalMinutes', 5000,6000)" фильтр следующим образом: filter: AdminReportsWorksnaps.filterMinutes('totalMinutes', 5000,6000)" он отлично работает. Я просто не вижу, как я могу передать входные значения из текстовых полей.

благодаря

Теги:

2 ответа

1

Передайте его как : разделенный (предположим, что вы используете шаблон controllerAs с псевдонимом vm)

ng-repeat="student in AdminReportsWorksnaps.data | filter: AdminReportsWorksnaps.filterMinutes: 'totalMinutes': fromMinutes: toMinutes"

Таким образом, в приведенном выше случае вам нужно ожидать 4 параметра в фильтре, AdminReportsWorksnaps.data параметром будет AdminReportsWorksnaps.data, второй будет totalMinutes, 3rd fromMinutes & last будет значением toMinutes

vm.filterMinutes = function (collection, prop, from, to) {
    //collection would have 
    console.log("AdminReportsWorksnaps.data", collection)
    console.log(prop, from, to);
    return (collection || []).filter(function (item) {
        return item[prop] >= from && item[prop] <= to;
    });
};
  • 0
    все еще не работает
  • 0
    @HisniFazlija Ваш псевдоним контроллера - AdminReportsWorksnaps ?
Показать ещё 8 комментариев
0

Похоже, вы используете controllerAs Так почему бы и не использовать псевдоним контроллера для моделей:

<label>Search from: <input ng-model="AdminReportsWorksnaps.fromMinutes"></label>
<label>Search from: <input ng-model="AdminReportsWorksnaps.toMinutes"></label>

<tr style="cursor: pointer;" ng-repeat="student in AdminReportsWorksnaps.data | filter: AdminReportsWorksnaps.filterMinutes('totalMinutes', AdminReportsWorksnaps.fromMinutes, AdminReportsWorksnaps.toMinutes)">
    <td>{{ student.studentId }}</td>
    <td>{{ student.firstName }}</td>
    <td>{{ student.lastName }}</td>
    <td>{{ student.municipality }}</td>
    <td class="total success">{{ student.totalMinutes | number}}</td>

Это должно сработать так.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню