2016-05-10 18 views
0

Angularjsでは非常に新しいです。複数のキー値でフィルタリングできますが、ここでは単一の値でフィルタリングする必要がありますが、複数の値を含む親データです。Angularjs親データの単一キー複数の値を持つフィルタ

$scope.movies = [{name:'aa', criteria:'SECURITY TYPE:Stocks|GEOGRAPHY:US'}, 
        {name:'bb', criteria:'TRADING STRATEGY:Monthly|YIELD:Mid,Blend'}, 
        {name:'cc', criteria:'SECURITY TYPE:Stocks|YIELD:Mid,Blend'}, 
        {name:'dd', criteria:'MARKETCAPITALIZATION:Mega|VOLATILITY:Low'}]; 


$scope.filterByProperties = function (data) { 

return $scope.filter[data.criteria] || noSubFilter($scope.filter); 

}; 

function noSubFilter(subFilterObj) { 
     for (var key in subFilterObj) { 
      if (subFilterObj[key]) return false; 
     } 
     return true; 
    } 

ビューファイルで:コントローラで

同様

<label>SECURITY TYPE</label> 
<input type="checkbox" ng-model="filter['Stocks']"> Stocks 

<label>Yield</label> 
<input type="checkbox" ng-model="filter['Mid']"> Mid 

しかし、私は、チェックボックスからそれらをフィルタリングする方法を複数の値を含むdata.criteriaフィールドとして

+0

"基準" の値は文字列です。あなたがそれをオブジェクトとしてthreatingしているようです。 – yBrodsky

答えて

0

カスタムフィルタを使用してデータを除外します。

<label>SECURITY TYPE</label> 
    <input type="checkbox" ng-model="criteria.stocks"> Stocks</input> 

    <label>Yield</label> 
    <input type="checkbox" ng-model="criteria.mids"> Mid</input> 
    <ul> 
    <li ng-repeat="m in movies | typeFilter: criteria"> 
     {{m.name}} {{m.criteria}} 

    </li> 

私は作業例を作成しました

.filter('typeFilter', function($filter) { 
    return function(input, criteria) { 
console.log(criteria); 
console.log(input); 
var data = input; 
if(criteria && !criteria.mids && !criteria.stocks){ 
    return input; 
} 
if(criteria.stocks){ 
    console.log(data); 
    data = $filter('filter')(data, {criteria:'Stocks'}); 
    console.log(data); 
} 
if(criteria.mids){ 
    console.log(data); 
    data = $filter('filter')(data, {criteria:'Mid'}); 
    console.log(data); 
} 
return data;}}); 

フィルタを追加し、ここでhttp://codepen.io/mkl/pen/wGOKJo

+0

ここで、チェックボックスのリストは長いです。そのような長いリストのフィルタオブジェクトを使うのは良い考えではありません。 – Moumita

+0

カスタムフィルタを作成し、オブジェクトに値が含まれているかどうかを識別するためにlodashを使用してみてください。カスタムフィルタを作成する方法を示すために私のコードを更新しました。 lodashを使用するのではなく、組み込み$フィルタを使用しています。これは、カスタムフィルタの使用方法を示すだけで、フィルタリングロジックを自分の状況に最も効率的にすることができます。 – Michael

関連する問題