在具有多个值的控制器中过滤

时间:2016-02-24 09:42:39

标签: angularjs

我有3个开关(复选框,它们返回true或false)来过滤列表。

清单:

vm.products = Product.query();

在我的控制器中,我想过滤vm.products,每当其中一个开关盒/复选框被更改时。

我到目前为止所有这一切都是无效的,过滤器论证:

vm.products = $filter('filter')('id', 1);

参数'过滤器' - 像它指向指令的sems?我必须这样做吗?当有多个值要检查时,制作动态过滤器函数/构建器的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我找到了一种使用自定义过滤器的方法;

.filter("myFilter", function(){

        return function(products, productTypes){

            var selectedProducts = [];
            for (i = 0; i < products.length; i++) {
                if (productTypes.indexOf(products[i].productTypeId.toString()) > -1) {
                    selectedProducts.push(incidents[i]);
                }
            }

            return selectedProducts;
        };

    })

然后我在我的控制器中使用它来调用过滤器功能;

vm.filterTypeUpdated = function ($event, typeId) {
    var productTypesId = "";
    if (vm.filterType1)
        productTypesId += "1,";
    if (vm.filterType2)
        productTypesId += "2,";
    if (vm.filterType3)
        productTypesId += "3,";

    vm.productsRoot = $filter('myFilter')(vm.products, productTypesId);
}

我觉得这不是最干净的方式,但它确实有效。如果有任何关于优化这一点的输入,我很满意: - )