2016-02-24 47 views
-1

我有3個開關(複選框,它們返回true或false)以在列表中進行過濾。帶有多個值的控制器中的過濾器

名單:

vm.products = Product.query(); 

在我的控制,我想篩選vm.products,每次開關盒的一個/複選框得到改變。

所有我走到這一步,是一個沒有工作,過濾器參數:

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

參數「過濾器」 - 就像它在指令指向SEMS?我必須這樣做嗎?當有多個值需要檢查時,製作動態過濾器函數/構建器的最佳方法是什麼?

+0

閱讀文檔:https://docs.angularjs.org/api/ng/filter/filter –

+0

已經做到了,他們沒有幫助我。所以我的問題在這裏。 – brother

+0

我得到這個工作: vm.filterTypeUpdated = function($ event,typeId){ console.log(typeId +':'+ $ event); vm.products = $ filter('filter')(vm.products,{productTypeId:typeId}) } 但是,這隻支持一個值被設置。我如何構建過濾器查詢? – brother

回答

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); 
} 

我不覺得這是做的最徹底的方法,但它的作品。如果有任何優化這方面的投入,我都耳朵:-)