2017-03-27 12 views
1

検索時に展開するコードがありますが、絞り込む際には助けが必要です。たとえば、タグ(色、緑)を追加し、「色の緑」だけを表示し、すべての色や腕を表示させないことです。ここでngTagsInputを使用してデータをフィルタリングする方法

は私の例です:http://codepen.io/stvgale/pen/vxzBXO

app.filter('filterByTags', function() { 
return function (items, tags) { 
if (!tags || !tags.length) { 
    return items; 
} 

var lowerTags = angular.copy(tags); 
angular.forEach(lowerTags, function (tag) { 
    tag.text = angular.lowercase(tag.text); 
}); 

var filtered = []; 
(items || []).forEach(function (item) { 
    var matches = lowerTags.some(function (tag) { 
    return (angular.lowercase(item.data1).indexOf(tag.text) > -1) || 
      (angular.lowercase(item.data2).indexOf(tag.text) > -1); 
    }); 
    if (matches) { 
    filtered.push(item); 
    } 

}); 

return filtered; 
};}); 

答えて

0

あなたはあなたのタグがcolor,greenある場合

は、例えば、検索テキスト

var searchtext = lowerTags.map(function(elem){ 
     return elem.text; 
    }).join(" "); 

を得るためにあなたのタグ配列に参加し、正規表現を使用することができます

var searchtextcolor green

、その後、あなただけの

var patt = new RegExp(searchtext,'i'); 

と一致した項目をチェックし、ここでマッチしたアイテム

var filtered = []; 
    (items || []).forEach(function (item) { 
     var matches = lowerTags.some(function (tag) { 
     return patt.test(item.data2); 
     }); 
     if (matches) { 
     filtered.push(item); 
     } 

    }); 

    return filtered; 

を返すために、正規表現のパターンとして、このテキストを使用することができますすることはFULL Example

+0

は感謝ですあなたの答えです。これが唯一の問題は、あなたが緑色ならば何も表示されないということです。 – Steve

+0

文字列を逆にして正規表現とマッチさせることはできますが、それは醜くなります。 JSONの構造を変更することをお勧めします。 – Nishant123

関連する問題