1

まず、最初にカスタム コンパレータを作成した理由は、'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']
}
4

1 に答える 1

4

あなたが何を求めているのか完全には理解できません。2 つのカスタム フィルター関数を備えた plunkr を作成しました。1 つはリスト項目で「a」と「b」を順番に検索し、もう 1 つは「a」と「b」を検索してそのタグにあるだけです。アイテム。うまくいけば、これを使用して、必要に応じて変更できます。あなたの目的のために、カスタムフィルター関数はカスタムコンパレーターよりも扱いやすいと思います。

http://plnkr.co/edit/fJ9iPQYyhGxAt00xi0OY

于 2013-09-09T23:11:07.663 に答える