Ng-repeatのブール値でフィルタリングしようとしています。
未登録ユーザーのリスト:
<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:!user.registered">
<div class="row-fluid">
<div class="span2">
{{user.name}}
</div>
</div>
</div>
登録ユーザーのリスト:
<h3>Registered Users</h3>
<div ng-repeat="user in users | filter:user.registered">
<div class="row-fluid">
<div class="span2">
{{user.name}}
</div>
</div>
</div>
登録済みおよび!registeredに基づいてフィルタリングする良い方法はありますか。
obj式によるフィルター:
<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:{registered:false}">
<div class="row-fluid">
<div class="span2">
{{user.name}}
</div>
</div>
</div>
JSFiddle: http://jsfiddle.net/alfrescian/9ytDN/
必要なロジックに基づいてtrueまたはfalseを返すメソッドをコントローラーで作成し、フィルターでその関数を指定します。
このようなもの:
$scope.isRegistered = function(item) {
return item.registered;
};
<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:!isRegistered ">
<div class="row-fluid">
<div class="span2">
{{user.name}}
</div>
</div>
</div>
アイテムにブール値プロパティが設定されていない場合、「!」を使用してプロパティがtrueに設定されていないアイテムを検索できます。引用符付き。例フィルター:{property: '!' + true}。
例:
$scope.users = [
{
name : 'user1 (registered)',
registered : true
},
{
name : 'user2 (unregistered)'
},
{
name : 'user3 (registered)',
registered : true
},
{
name : 'user4 (unregistered)'
}
未登録ユーザーフィルターを取得するには:
<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:{registered:'!'+true}">
<div class="row-fluid">
<div class="span2">
{{user.name}}
</div>
</div>
</div>
同じ質問がありました。 Angular 1.1.5。ではAlfrescianのソリューションは機能しませんでした。
このフィドルを見つけました: http://jsfiddle.net/buehler/HCjrQ/
.filter('onlyBooleanValueFilter', [function(){
return function(input, param){
var ret = [];
if(!angular.isDefined(param)) param = true;
angular.forEach(input, function(v){
// 'active' is a hard-coded field name
if(angular.isDefined(v.active) && v.active === param){
ret.Push(v);
}
});
return ret;
};
}])
フィールドに応じてフィルターのコードを調整する必要があります。
Websirnikの答えをわずかに変更します。これにより、データセットの任意の列名が許可されます。
.filter('onlyBooleanValueFilter', [function () {
return function (input, column, trueOrFalse) {
var ret = [];
if (!angular.isDefined(trueOrFalse)) {
trueOrFalse = false;
}
angular.forEach(input, function (v) {
if (angular.isDefined(v[column]) && v[column] === trueOrFalse) {
ret.Push(v);
}
});
return ret;
};
}])
マークアップ:
<div repeat="row in your.dataset | onlyBooleanValueFilter: 'yourColumn' : true">
...your stuff here....
</div>