this postに基づいてフィルタを作成しました。 問題は、いくつかのオブジェクトでは、複数の値(値の配列)を同時に持つことができるプロパティを持っていることです(たとえば、ワインのタイプが同時にカテゴリ「ワイン」と「シャンパン」になる可能性があります) )。私は運がないとフィルターを変更しようとしています。角度 - 複数の値を持つプロパティを持つオブジェクトをフィルタリングする
<div ng-controller="myCtrl">
<div ng-repeat="(prop, ignoredValue) in wines[0]" ng-init="filter[prop]={}">
<b>{{prop}}:</b><br />
<span class="quarter" ng-repeat="opt in getOptionsFor(prop)">
<b><input type="checkbox" ng-model="filter[prop][opt]" /> {{opt}}</b>
</span>
<hr />
</div>
<div ng-repeat="w in filtered=(wines | filter:filterByProperties)">
{{w.name}} ({{w.category}})
</div>
そして、私の角度ロジック:ここに私のhtmlです
var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope) {
$scope.wines = [
{ name: "Wine A", category: ["red"] },
{ name: "Wine B", category: ["red"] },
{ name: "wine C", category: ["white"] },
{ name: "Wine D", category: ["red"] },
{ name: "Wine E", category: ["red"] },
{ name: "wine F", category: ["champagne","white"] },
{ name: "wine G", category: ["champagne"]},
{ name: "wine H", category: ["champagne"] }
];
$scope.filter = {};
$scope.getOptionsFor = function (propName) {
return ($scope.wines || []).map(function (w) {
return w[propName];
}).filter(function (w, idx, arr) {
return arr.indexOf(w) === idx;
});
};
$scope.filterByProperties = function (wine) {
// Use this snippet for matching with AND
var matchesAND = true;
for (var prop in $scope.filter) {
if (noSubFilter($scope.filter[prop])) continue;
if (!$scope.filter[prop][wine[prop]]) {
matchesAND = false;
break;
}
}
return matchesAND;
};
function noSubFilter(subFilterObj) {
for (var key in subFilterObj) {
if (subFilterObj[key]) return false;
}
return true;
}
});
私はオブジェクトが配列その複数の値を持つプロパティを持っているとき、それはとても仕事したいと思います(白とシャンパンの例のように)、オブジェクトはその1つ(またはその両方)を選択するだけで選択されます。前もって感謝します。
私は、私はこのような配列にすべてのカテゴリを変換推薦JsFiddle hereに
さて、私は論理を参照してください。もう1つのソリューションに加えて、すでに1つのプロパティ(f.ex名)でフィルタリングしていて、別のプロパティ(f.ex.カテゴリ)の値でフィルタすると、両方のセットが追加されず、それは交差点を作る。私はこれが問題をより良く解決すると思うので、これを有効に切り替えます。ありがとう! – Joe82