141

特定のプロパティの値でオブジェクトのリストをフィルタリングするカスタム フィルターを AngularJS で作成しようとしています。この場合、「極性」プロパティ(「ポジティブ」、「ニュートラル」、「ネガティブ」の可能な値)でフィルタリングしたいと思います。

フィルターなしの私の作業コードは次のとおりです。

HTML:

<div class="total">
    <h2 id="totalTitle"></h2>
    <div>{{tweets.length}}</div>
    <div id="totalPos">{{tweets.length|posFilter}}</div>
    <div id="totalNeut">{{tweets.length|neutFilter}}</div>
    <div id="totalNeg">{{tweets.length|negFilter}}</div>
</div>

JSON 形式の「$scope.tweets」配列は次のとおりです。

{{created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user       screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
 {created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
 {created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"}}

私が思いつくことができる最高のフィルターは次のとおりです。

myAppModule.filter('posFilter', function(){
return function(tweets){
    var polarity;
    var posFilterArray = [];
    angular.forEach(tweets, function(tweet){
        polarity = tweet.polarity;
        console.log(polarity);
        if(polarity==='Positive'){
              posFilterArray.push(tweet);
        }
        //console.log(polarity);
    });
    return posFilterArray;
};
});

このメソッドは空の配列を返します。また、「console.log(polarity)」ステートメントからは何も出力されません。「極性」のオブジェクト プロパティにアクセスするための正しいパラメータを挿入していないようです。

何か案は?あなたの応答は大歓迎です。

4

5 に答える 5

27

ドキュメントには完全な答えがあります。とにかく、これはそれがどのように行われるかです:

<input type="text" ng-model="filterValue">
<li ng-repeat="i in data | filter:{age:filterValue}:true"> {{i | json }}</li>

配列でのみフィルタリングさageれ、完全一致用です。datatrue

ディープ フィルタリングの場合、

<li ng-repeat="i in data | filter:{$:filterValue}:true"> {{i}}</li>

$ディープ フィルター用の特別なプロパティで、trueは上記の完全一致用です。

于 2015-05-22T12:05:41.107 に答える
23

これを行うと、より動的にすることもできます。

<input name="filterByPolarity" data-ng-model="text.polarity"/>

次に、 ng-repeat は次のようになります

<div class="tweet" data-ng-repeat="tweet in tweets | filter:text"></div>

もちろん、このフィルタは極性によるフィルタリングにのみ使用されます

于 2014-05-04T19:01:26.923 に答える
4

これを試すことができます。私のために働いている「名前」はarrのプロパティです。

repeat="item in (tagWordOptions | filter:{ name: $select.search } ) track by $index
于 2016-10-19T14:32:48.607 に答える