1. ホーム
  2. javascript

[解決済み] angularjsのフィルターに引数を渡す

2023-02-02 08:55:34

質問

filter関数に引数を渡して、任意の名前でフィルタリングすることは可能でしょうか?

以下のようなものです。

$scope.weDontLike = function(item, name) {
    console.log(arguments);
    return item.name != name;
};

どのように解決するのですか?

実はもう一つ(多分もっと良い解決策)、angularのネイティブな「filter」フィルターを使いながら、カスタムフィルターに引数を渡す方法があります。

次のコードを考えてみてください。

<div ng-repeat="group in groups">
    <li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)">
        <span>{{friend.name}}</span>
    <li>
</div>

これを動作させるには、以下のようにフィルタを定義するだけです。

$scope.weDontLike = function(name) {
    return function(friend) {
        return friend.name != name;
    }
}

ここでわかるように、weDontLike は実際には、フィルタから来る元の項目だけでなく、あなたのパラメータをスコープに持つ別の関数を返します。

これができることに気づくのに2日かかりました。このソリューションはまだどこにも見たことがありません。

チェックアウト angular.jsのフィルタの極性を反転させる を参考に、フィルタを使った他の便利な操作に使ってみてください。