Javascript 在单击按钮时在角度过滤器之间切换

Javascript 在单击按钮时在角度过滤器之间切换,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我在angular模块中编写了一些不同的自定义过滤器,以实现我想要的排序,例如 角度: var sortByValue = function() { return function(input) { /*...*/ return some_boolean; } }; var sortByCount = function() { return function(input) { /*...*/ return some

我在angular模块中编写了一些不同的自定义过滤器,以实现我想要的排序,例如

角度:

var sortByValue = function() {
    return function(input) {
       /*...*/
       return some_boolean;
    }
};

var sortByCount = function() {
    return function(input) {
       /*...*/
       return some_boolean;
    }
};
var myController = function($scope) {
    // function called on ng-init
    $scope.initialize = function() {
        $scope.byValue = true;
    }
};

var sortFunction = function() {
    if($scope.byValue) {
        return sortByValue();
    } else {
        return sortByCount();
    }
}
在myHTML(jade)中,我可以调用不同的过滤器:

.row(ng-repeat='item in array | sortByValue')

我现在想添加一个按钮,在两个不同的排序选项之间切换。


我试图通过定义一个新的整体过滤器函数来实现这一点,该函数使用
$scope
变量来跟踪切换(见下文),但它不起作用

角度:

var sortByValue = function() {
    return function(input) {
       /*...*/
       return some_boolean;
    }
};

var sortByCount = function() {
    return function(input) {
       /*...*/
       return some_boolean;
    }
};
var myController = function($scope) {
    // function called on ng-init
    $scope.initialize = function() {
        $scope.byValue = true;
    }
};

var sortFunction = function() {
    if($scope.byValue) {
        return sortByValue();
    } else {
        return sortByCount();
    }
}
我还尝试将
$scope
变量传递给HTML本身中的过滤器,例如
sortFunction:byValue
,但它也不起作用

有人能帮忙吗?谢谢大家!



演示plunker@

可以使用一个自定义筛选函数和一个参数

app.filter('mySorter', function(){
    return function(items, sortType){
        // sort logic
        if(!items) return;
        return items.sort(function(a, b){
            if(sortType=== 'order'){
               // order matching
             }else{
               // value matching
             }
        });
    }

});
HTML


“你有个疯狂的代言人,@charlietfl。谢谢我来看看!由于一些未知的原因,我无法理解,这对我也不起作用,:(但是,理想情况下,我更愿意将我的自定义过滤器分开,因为一些列表不会使用所有的过滤器。很公平。如果有帮助,还可以在过滤器中设置默认值,使用和
$filter
$scope.sortType = 'order' // or 'value'

$scope.toggleSort = function(type){
    $scope.sortType = type;
}