2013-02-28 20 views
6

私はAngularJSディレクティブ内でフィルタを使用しようとしていますが、正確な方法はわかりません。メーリングリストのいくつかの情報から、$ filterを注入して使用できるはずですが、どのように/どこで呼び出すのかはわかりません。AngularJSのディレクティブでフィルタを使用する

私のディレクティブは、現在、次のようになります。

myApp.directive('fancyDisplay', ['$filter', function($filter) { 
    return { 
     scope: { 
      'fancyDisplay': '=' 
     }, 
     template: "<div ng-repeat='datum in fancyDisplay | filter:tagFilter'>{{datum.name}}</div>" 
    }; 
}]); 

filter:tagFilterが機能していません。ディレクティブのデータをどのようにフィルタリングする必要がありますか?

JSfiddle利用可能http://jsfiddle.net/VDLqa/4/お返事ありがとうございます。

答えて

14

ディレクティブ(scope: { 'fancyDisplay': '=' })に新しい分離スコープを作成すると、親スコープからプロパティにアクセスできなくなります。 tagFilterは親スコープで定義されているため、アクセスできません。

<div fancy-display="model.data" filter="tagFilter"></div> 

そしてディレクティブに:ディレクティブの属性として

パスtagFilter

scope: { 
    fancyDisplay: '=', 
    tagFilter: '=filter' 
}, 

jsfiddlehttp://jsfiddle.net/bmleite/VDLqa/5/

+0

うーん...私はそれを複数のフィルターにどのように拡張しますか? – jgm

+0

より多くのattrsを定義してください: '

'と 'scope:{fancyDisplay: '='、filter1: '='、filter2: '='}'の指示に従ってください。注:私はそれらを 'filter1'と 'filter2'と呼んでいますが、あなたが好きなものを呼び出すことができます。また、多くのフィルタを使い始める場合は、 'ng-model'データをディレクティブに送る前にそれをあらかじめフィルタリングすることをお勧めします。 – bmleite

+0

プレフィルタリングは私が始めたところで面白いです。私は指令自体でこれを試しましたが、動作しませんでした。これを達成するために私はどのようにフィドルを変えますか? – jgm

1

あなたの答えのために@bmleiteに感謝します。

参考になるかもしれないもう一つのことは、 あなたのリストにdeplicatesを持っている場合、このように あなたのng-repeat指令を宣言することを確認することです。

これは私を永遠に理解するのに苦労しました。あなたがxでトラックを指定する前に、どうやらあなたは をフィルタリングする必要があります。

app.directive("someDirective", function(){ ... 

    restrict: "E", 
    ... 
    template:"<ul ng-repeat='t in tree | filter:key track by $index'><li>{{t}}</li></ul>", 

}); 

逆は動作しません。

関連する問題