Javascript AngularJS-过滤器多选

Javascript AngularJS-过滤器多选,javascript,angularjs,ngtable,Javascript,Angularjs,Ngtable,我用$filter来过滤我的数组 var filteredData = params.filter() ? $filter('filter')($scope.myNgTable.data, params.filter()): $scope.myNgTable.data; 我创建了一个多选过滤器,用于筛选,但它返回一个数组: col:[“a”,“b”],它与我看到的$filter不兼容 我想当过滤器是col:[“a”,“b”]时,它将显示col包含“a”或col包含“b”的所有行

我用$filter来过滤我的数组

var filteredData = params.filter() ?
    $filter('filter')($scope.myNgTable.data, params.filter()):
    $scope.myNgTable.data;
我创建了一个多选过滤器,用于筛选,但它返回一个数组: col:[“a”,“b”],它与我看到的$filter不兼容

我想当过滤器是col:[“a”,“b”]时,它将显示col包含“a”或col包含“b”的所有行。(如果只有一种方法可以实现相等,那么这很好:col==“a”或col==“b”)

可能吗

回答:

.filter("in_Array", function ($filter){
    return function(data, filter){
        var out = [];
        $.each(filter, function(key,val) {
            var obj = {};
            for(var i=0;i<val.length;i++) {
                obj[key] = val[i];
                var tmp = $filter('filter')(data, obj);
                out = $.unique($.merge(out, tmp));
            }
        });
        return out;
    };
});
 <div ng-controller="MyCtrl">
        <h4>Pick a brand to see the models</h4>
        <div ng-init="group = (cars | groupBy:'make')" style="width:100%">
            <div ng-repeat="m in group"   style="width:100px; float:left;">
                <b><input type="checkbox" ng-model="useMakes[$index]"/>{{m}}</b>
            </div>
        </div>
        <div style="clear:both;"></div>
        <div>
            <ul>
                <li  ng-repeat="car in cars | filter:filterMakes()"><p><b>{{car.make}} - {{car.model}}</b></p></li>
            </ul>    
        </div>
    </div>
var myApp = angular.module('myApp',[]);

function MyCtrl($scope, filterFilter) {
    $scope.useMakes = [];

    $scope.filterMakes = function () {
        return function (p) {
            for (var i in $scope.useMakes) {
                if (p.make == $scope.group[i] && $scope.useMakes[i]) {
                    return true;
                }
            }
        };
    };

    $scope.cars = [
        {model: '316', make: 'Bmw'},
        {model: '520', make: 'Bmw'},
        {model: 'Fiesta', make: 'Ford'},
        {model: 'Focus', make: 'Ford'},
        {model: 'Clio', make: 'Renault'},
        {model: 'Toledo', make: 'Seat'},
        {model: 'Leon', make: 'Seat'},
        {model: 'Insignia', make: 'Opel'},
        {model: 'Astra', make: 'Opel'},
        {model: 'Corsa', make: 'Opel'}
    ];    
}


var uniqueItems = function (data, key) {
    var result = new Array();
    for (var i = 0; i < data.length; i++) {
        var value = data[i][key];

        if (result.indexOf(value) == -1) {
            result.push(value);
        }

    }
    return result;
};

myApp.filter('groupBy',
function () {
    return function (collection, key) {
        if (collection === null) return;
        return uniqueItems(collection, key);
    };
});
.filter(“在数组中”,函数($filter){
返回函数(数据、过滤器){
var out=[];
$。每个(过滤器、函数(键、val){
var obj={};

对于(var i=0;i请查看此示例。这将在单击时使用多重过滤器复选框

HTML:

.filter("in_Array", function ($filter){
    return function(data, filter){
        var out = [];
        $.each(filter, function(key,val) {
            var obj = {};
            for(var i=0;i<val.length;i++) {
                obj[key] = val[i];
                var tmp = $filter('filter')(data, obj);
                out = $.unique($.merge(out, tmp));
            }
        });
        return out;
    };
});
 <div ng-controller="MyCtrl">
        <h4>Pick a brand to see the models</h4>
        <div ng-init="group = (cars | groupBy:'make')" style="width:100%">
            <div ng-repeat="m in group"   style="width:100px; float:left;">
                <b><input type="checkbox" ng-model="useMakes[$index]"/>{{m}}</b>
            </div>
        </div>
        <div style="clear:both;"></div>
        <div>
            <ul>
                <li  ng-repeat="car in cars | filter:filterMakes()"><p><b>{{car.make}} - {{car.model}}</b></p></li>
            </ul>    
        </div>
    </div>
var myApp = angular.module('myApp',[]);

function MyCtrl($scope, filterFilter) {
    $scope.useMakes = [];

    $scope.filterMakes = function () {
        return function (p) {
            for (var i in $scope.useMakes) {
                if (p.make == $scope.group[i] && $scope.useMakes[i]) {
                    return true;
                }
            }
        };
    };

    $scope.cars = [
        {model: '316', make: 'Bmw'},
        {model: '520', make: 'Bmw'},
        {model: 'Fiesta', make: 'Ford'},
        {model: 'Focus', make: 'Ford'},
        {model: 'Clio', make: 'Renault'},
        {model: 'Toledo', make: 'Seat'},
        {model: 'Leon', make: 'Seat'},
        {model: 'Insignia', make: 'Opel'},
        {model: 'Astra', make: 'Opel'},
        {model: 'Corsa', make: 'Opel'}
    ];    
}


var uniqueItems = function (data, key) {
    var result = new Array();
    for (var i = 0; i < data.length; i++) {
        var value = data[i][key];

        if (result.indexOf(value) == -1) {
            result.push(value);
        }

    }
    return result;
};

myApp.filter('groupBy',
function () {
    return function (collection, key) {
        if (collection === null) return;
        return uniqueItems(collection, key);
    };
});

选择一个品牌来查看模型
{{m}}
  • {{car.make}-{{car.model}

JS:

.filter("in_Array", function ($filter){
    return function(data, filter){
        var out = [];
        $.each(filter, function(key,val) {
            var obj = {};
            for(var i=0;i<val.length;i++) {
                obj[key] = val[i];
                var tmp = $filter('filter')(data, obj);
                out = $.unique($.merge(out, tmp));
            }
        });
        return out;
    };
});
 <div ng-controller="MyCtrl">
        <h4>Pick a brand to see the models</h4>
        <div ng-init="group = (cars | groupBy:'make')" style="width:100%">
            <div ng-repeat="m in group"   style="width:100px; float:left;">
                <b><input type="checkbox" ng-model="useMakes[$index]"/>{{m}}</b>
            </div>
        </div>
        <div style="clear:both;"></div>
        <div>
            <ul>
                <li  ng-repeat="car in cars | filter:filterMakes()"><p><b>{{car.make}} - {{car.model}}</b></p></li>
            </ul>    
        </div>
    </div>
var myApp = angular.module('myApp',[]);

function MyCtrl($scope, filterFilter) {
    $scope.useMakes = [];

    $scope.filterMakes = function () {
        return function (p) {
            for (var i in $scope.useMakes) {
                if (p.make == $scope.group[i] && $scope.useMakes[i]) {
                    return true;
                }
            }
        };
    };

    $scope.cars = [
        {model: '316', make: 'Bmw'},
        {model: '520', make: 'Bmw'},
        {model: 'Fiesta', make: 'Ford'},
        {model: 'Focus', make: 'Ford'},
        {model: 'Clio', make: 'Renault'},
        {model: 'Toledo', make: 'Seat'},
        {model: 'Leon', make: 'Seat'},
        {model: 'Insignia', make: 'Opel'},
        {model: 'Astra', make: 'Opel'},
        {model: 'Corsa', make: 'Opel'}
    ];    
}


var uniqueItems = function (data, key) {
    var result = new Array();
    for (var i = 0; i < data.length; i++) {
        var value = data[i][key];

        if (result.indexOf(value) == -1) {
            result.push(value);
        }

    }
    return result;
};

myApp.filter('groupBy',
function () {
    return function (collection, key) {
        if (collection === null) return;
        return uniqueItems(collection, key);
    };
});
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope,filterFilter){
$scope.useMakes=[];
$scope.filterMakes=函数(){
返回函数(p){
for(var i在$scope.useMakes中){
if(p.make==$scope.group[i]&&$scope.useMakes[i]){
返回true;
}
}
};
};
$scope.cars=[
{车型:'316',品牌:'Bmw'},
{型号:'520',品牌:'Bmw'},
{车型:'Fiesta',品牌:'Ford'},
{型号:'Focus',品牌:'Ford'},
{车型:'Clio',品牌:'Renault'},
{型号:'Toledo',制造:'Seat'},
{型号:'Leon',制造:'Seat'},
{型号:'Insignia',品牌:'Opel'},
{型号:'Astra',品牌:'Opel'},
{型号:'Corsa',品牌:'Opel'}
];    
}
var uniqueItems=函数(数据、键){
var result=新数组();
对于(变量i=0;i
可能与您的答案重复,我将您的答案用作模板。实际答案在问题中