まず、最初にカスタム コンパレータを作成した理由は、'tags' などの配列である式の属性が、式に特定の順序で値を持たせる必要があり、それ以外の場合は一致しないためです。 . (したがって、['a', 'b'] というタグを持つ式は ['x', 'a', 'b', 'y'] には一致しますが、['x', 'b', 'a', '] には一致しません。 y'].)
Angular の $filter サービスでは、カスタム コンパレータを提供できるため、これを回避できました。ただし、キーの値ではなく、属性の種類に基づいてのみフィルタリングできます。
オブジェクト内の 1 つの属性のみを対象とするカスタム コンパレータが必要です。Angular のソース コードをコピーして変更せずにそれを行う方法はありますか?
これが私のカスタムコンパレータの例です: ( http://plnkr.co/edit/eFeinQhHTIZrzXBm4srqにあります)
$scope.inclusiveFilter = function(expected, actual){
if(expected && actual){
console.log(expected, actual);
if(angular.isArray(expected) && angular.isArray(actual)){
for(var t in actual){
if(expected.indexOf(actual[t]) == -1){
return false;
}
}
}
return true;
}
}
私の例では、タグのフィルターは問題なく機能しますが、$ でどのプロパティにも一致しなくなりました。名前ではなく、タイプに基づいて属性を比較することしかできません。したがって、次のような式は機能しません。
{
includeThese: ['a', 'b'],
excludeThese: ['x', 'y']
}