Angular - Смарт-таблица - ИЛИ в фильтре

Я использую очень хорошую библиотеку Smart-table для отображения своих данных. Я сделал пользовательскую директиву фильтра, чтобы позволить мне назначать фильтры кнопкам, чтобы пользователи могли легко фильтровать по состоянию строки (например, «Новое», «Готово», «Ошибка» и т. д.). Это отлично работает, но я хотел бы иметь возможность составлять фильтры, чтобы я мог фильтровать по строкам, содержащим одно из двух значений в столбце состояния (например, «Новое» и «Ошибка»).

Мой пользовательский фильтр выглядит так....

app.directive('stCustomFilter', function() {
    return {
        restrict: 'A',
        require: '^stTable',
        scope: true,
        link: function(scope, element, attr, ctrl) {
            var tableState = ctrl.tableState();
            var searchText = attr.stCustomFilter;
            var searchColumn = attr.stCustomFilterColumn;

            element.on('click', function(data) {
                tableState.search.predicateObject = {};
                ctrl.search(searchText, searchColumn);
                //console.log(tableState);
                scope.$apply();
            })
        }
    };
});

и используется внутри таблицы st-table следующим образом.....

<div class="btn-group  btn-group-sm">
    <button st-custom-filter="" st-custom-filter-column="status">All</button>
    <button st-custom-filter="New" st-custom-filter-column="status">New</button>
    <button st-custom-filter="Done" st-custom-filter-column="status">Done</button>
    <button st-custom-filter="Failed" st-custom-filter-column="status">Failed</button>
</div> 

Так что в идеале я хотел бы иметь возможность использовать что-то вроде "New||Failed" внутри st-custom-filter, слегка изменив директиву, но у меня есть ощущение, что ответ может заключаться в написании чего-то более сложного, включающего метод st-pipe.

Может ли кто-нибудь предложить предложение или два? Большое спасибо.


person dandanknight    schedule 05.03.2015    source источник


Ответы (1)


Для фильтра ИЛИ, который не поддерживается фильтром углового фильтра по умолчанию, вам нужно будет настроить собственный фильтр и указать смарт-таблице использовать его вместо фильтра по умолчанию.

angular.filter('myCustomFilter',function(){
return function(array, predicteObject){
//the predicate object is forwarded by smart table whenever a directive call the search method.. for example :{ myProp1:'myInput1',myProp2:'myInput2
//process the array with your OR logic
}})

затем скажите смарт-таблице использовать ваш собственный фильтр вместо фильтра по умолчанию.

<table st-table="myCollection" st-set-filter="myCustomFilter"></table>
person laurent    schedule 16.03.2015
comment
Привет Лоран, ваш ответ очень ценится. Я попробую на следующий день или два и вернусь с соответствующей благодарностью! - person dandanknight; 17.03.2015