2013-10-09 68 views
0

我目前正在一個汽車租賃網站,我正在建設與角。ng-repeat的多角度濾鏡 - 有更好的方法嗎?

在汽車選擇部分,用戶需要能夠過濾很多不同的屬性,例如4x4,自動或手動裝置,以及汽車類別,如緊湊型,高級,跑車等。最重要的是在訂購汽車時還需要一些相當廣泛的工作。

這很容易通過標準過濾器和每個過濾按鈕的一個小指令來實現,但我可以想象,像12個過濾器一樣,ng-repeat屬性將會如何。可能沒什麼我應該害怕的,但依然如此。

我想讓你們運行的是如果有比這更好的解決方案。

這一定會不必要地混亂到最後。

這是怎麼回事現在運行:

HTML:

<div filter-btn="4x4" ng-model="filters" class="btn">4x4</div> 
    <div filter-btn="manual" ng-model="filters" class="btn">manual</div> 
    <input type="text" ng-model="filters.searchCar"> 
    <div class="car-cont"> 
     <div ng-repeat="car in filteredCars = (cars | filter:filters.4x4 | filter:filters.manual | filter:filters.searchCar)" class="car">{{car.model}}</div> 
     <div ng-show="!filteredCars.length">No cars</div> 
    </div> 

JS:

angular.module('mabi').directive('filterBtn',[ function() { 
    var linkFunction = function(scope, elem, attr){ 
     var activeFilter = attr.filterBtn; 

     var clickFunction = function(){ 
      scope.$apply(function(){ 
       if (scope.model[activeFilter] != activeFilter){ 
        scope.model[activeFilter] = activeFilter; 
       } else { 
        scope.model[activeFilter] = ""; 
       } 
      }); 
      console.log(scope.model); 
     } 

     elem.bind('click', clickFunction); 
    } 

    return { 
     restrict: "A", 
     require: 'ngModel', 
     link: linkFunction, 
     scope: { 
      model: "=ngModel" 
     } 
    } 
}]); 

回答

0

我明白您的顧慮,但我要說的是,你應該做的第一件事就是試試看。使用盡可能多的數據進行測試,您可以合理預期並嘗試使用不良瀏覽器的慢速機器上的所有過濾器(咳嗽!IE8 ...咳嗽!)。

如果在這些條件下性能確實不可接受,那麼您可以嘗試製作一個自定義過濾器,該過濾器需要參數而不是鏈接一堆過濾器。我不確定這是否會更快,但它至少會消除大量的單個函數調用。它也可以讓你完全控制優化代碼。

0

簡化它的一種方法是使用過濾器作爲對象,而不是比較每個單獨的值,我已經爲你製作了一個plnkr和一個工作示例。我曾與按鈕和複選框做以防萬一你有任何偏好;)

工作plunker http://plnkr.co/edit/5zj8n6RUD0K21ypsopGa?p=preview