角复选框过滤 [英] Angular checkbox filtering

查看:123
本文介绍了角复选框过滤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着写一个自定义过滤器通过一些复选框来过滤,但还没有任何运气,我已经找到了解决方案,在这里,但不,但没有合适的 - 会有写此复选框功能的另一种方式 - 我已结构这款本角应用程序错误??

我重新创建我的小角应用程序中的jsfiddle这里( http://jsfiddle.net/samstimpson/vorg019v/

  VAR someApp = angular.module('someApp',[]);someApp.factory('searchFactory',函数(){
    返回{查询:}
});someApp.factory('checkboxFactory',函数(){
    VAR checkboxFactory = [
        {名称:项目1,资料:1},
        {名称:项目2,项目:2},
        {名称:'项目3'项目:3}
    ];
    返回checkboxFactory;
});someApp.factory('listFactory',函数(){
    VAR listFactory = [
        {名称:'列表项01',资料:1},
        {名称:'列表项02',项目:2},
        {名称:'列表项03,编号:3},
        {名称:'列表项04',资料:1},
        {名称:'列表项05',项目:2},
        {名称:'列表项06项目:3},
        {名称:'列表项07',资料:1},
        {名称:'列表项08',项目:2},
        {名称:'列表项09',编号:3},
        {名称:'列表项10',资料:1}
    ];
    返回listFactory;
});someApp.filter('filterByCategory',函数($过滤器){
    返回功能(listItems中){
        的console.log(listItems中);
    };
});someApp.controller('checkboxCtrl',['$范围,checkboxFactory','searchFactory',函数($范围,checkboxFactory,searchFactory){
    $ scope.checkboxes = checkboxFactory;
    $ scope.search = searchFactory;
}]);someApp.controller('的listctrl',['$范围,listFactory','searchFactory',函数($范围,listFactory,searchFactory){
    $ scope.listItems = listFactory;
    //console.log(search);
    $ scope.search = searchFactory;
}]);


解决方案

您需要添加几件事情。

第一家商店,一个框在模型中选择了一个事实:

 <输入类型=复选框NG模型=checkbox.selected/>

然后定义您的filterByCategory筛选:

  someApp.filter('filterByCategory',函数(){
    返回功能(输入,复选框){
        的console.log(输入,复选框);
        VAR RET = [];
        对于(输入变种I){
            VAR匹配= FALSE;
            对(在复选框变种j)条{
                如果(复选框[J] .selected&放大器;&安培;复选框[J] .item ==输入[I] .item){
                   ret.push(输入[I]);
                }
            }
        }
        如果(ret.length大于0){
            返回RET;
        }其他{
            返回输入;
        }
    };
});

这个过滤器的几点说明:
过滤函数可以接受n个参数,第一个是过滤阵列及以下(ARG1,ARG2,...)是你使用的参数。

 阵列| FILTERNAME:ARG1:ARG2

我们想要过滤的复选框的listItems中,这就是为什么我做了

然后,你需要让你的ListController注意复选框:

  someApp.controller('的listctrl',['$范围,checkboxFactory','listFactory','searchFactory',函数($范围,checkboxFactory,listFactory,searchFactory){
$ scope.checkboxes = checkboxFactory;

和最后使用过滤器列表:

 <李NG重复=在listItems中的项目|过滤器:search.query | filterByCategory:复选框>
    {{ 项目名 }}
< /李>

所有这些修改都可以在小提琴: http://jsfiddle.net/vorg019v/2/

Im trying to write a custom filter to filter by some checkboxes but havent had any luck, Ive found a solutions here but do not but none fit - would there be a alternative way of writing this checkbox functionality - have I structured this this Angular app incorrectly??

I recreated my little angular app in jsfiddle here (http://jsfiddle.net/samstimpson/vorg019v/):

var someApp = angular.module('someApp', []);

someApp.factory('searchFactory', function(){
    return { query: "" }
});

someApp.factory('checkboxFactory', function() {
    var checkboxFactory = [
        { name: 'item 1', item: 1 },
        { name: 'item 2', item: 2 },
        { name: 'item 3', item: 3 }
    ];
    return checkboxFactory;
});

someApp.factory('listFactory', function() {
    var listFactory = [
        { name: 'list item 01', item: 1 },
        { name: 'list item 02', item: 2 },
        { name: 'list item 03', item: 3 },
        { name: 'list item 04', item: 1 },
        { name: 'list item 05', item: 2 },
        { name: 'list item 06', item: 3 },
        { name: 'list item 07', item: 1 },
        { name: 'list item 08', item: 2 },
        { name: 'list item 09', item: 3 },
        { name: 'list item 10', item: 1 }
    ];
    return listFactory;
});

someApp.filter('filterByCategory', function($filter) {
    return function(listItems) {
        console.log(listItems);
    };
});

someApp.controller('checkboxCtrl', ['$scope','checkboxFactory', 'searchFactory', function($scope, checkboxFactory, searchFactory) {
    $scope.checkboxes = checkboxFactory;
    $scope.search = searchFactory;
}]);

someApp.controller('listCtrl', ['$scope','listFactory','searchFactory', function($scope, listFactory, searchFactory) {
    $scope.listItems = listFactory;
    //console.log(search);
    $scope.search = searchFactory;
}]);

解决方案

You need to add a couple of things.

First store the fact that a box is selected in your model :

<input type="checkbox" ng-model="checkbox.selected"/>

Then define your filterByCategory to filter :

someApp.filter('filterByCategory', function() {
    return function(input, checkboxes) {
        console.log(input, checkboxes);
        var ret =[];
        for (var i in input){
            var match = false;
            for (var j in checkboxes){
                if (checkboxes[j].selected && checkboxes[j].item == input[i].item){
                   ret.push(input[i]);   
                }
            }
        }
        if (ret.length > 0){
            return ret;
        } else {
            return input;
        }
    };
});

Some explanations about this filter : a filter function can take n arguments, the first one is the array to filter and the following (arg1, arg2, ...) are parameters you used.

array | filterName:arg1:arg2

We want to filter the listItems with the checkboxes, that's why I'm doing that

Then you need to let your ListController be aware of checkboxes :

someApp.controller('listCtrl', ['$scope','checkboxFactory','listFactory','searchFactory', function($scope, checkboxFactory,listFactory, searchFactory) {
$scope.checkboxes = checkboxFactory;

And finally use your filter in the list :

<li ng-repeat="item in listItems | filter: search.query | filterByCategory : checkboxes">
    {{ item.name }}
</li>

All these modifications are available on the fiddle : http://jsfiddle.net/vorg019v/2/

这篇关于角复选框过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆