これまで何度もフィルタリングを行いましたが、この特定のケースで問題があります。私はオブジェクトのリストをページネーションで設定していますが、使いやすさのためにそれらをフィルタリングできるようにしたいと考えています。オブジェクトの例は次のようになります。2つのオブジェクトフィールドのAngularJsフィルタ
{
baseline:0.75
clonedFrom:Object
description:"Just a simple description.."
includeable:false
key:"bc889881-7979-4e04-b586-d53faab26b6b"
name:"Just a simple question?"
type:"BayesianModel"
version:1483477351992
versionComment:null
versionLabel:"0.11"
}
ほとんどの場合、オブジェクトの外観は恣意的です。私は同時にオブジェクトのname
とdescription
の両方をフィルタリングしようとしています。例えば、ユーザーがいずれかのキーワードを知っている場合、結果を絞り込むことができます。
私はフィルタと、以下に示す<ul>
の内側結果についてinput
を持っている:
<ul class="list-group">
<li class="list-group-item">
<div class="form-group has-feedback">
<input type="text"
ng-model="vm.resultFilter"
ng-change="vm.updateFilter()"
class="form-control filterInput"
placeholder="Filter Results" />
<span ng-if="vm.resultFilter"
ng-click="vm.resultFilter = ''; vm.updateFilter();"
class="fa fa-times fa-lg form-control-feedback">
</span>
</div>
</li>
<li class="list-group-item link-row model-list"
ng-repeat="result in vm.filteredResults
| startFrom : ((vm.currentPage - 1) * vm.itemsPerPage)
| limitTo: vm.itemsPerPage"
ng-if="result.name != vm.model.name"
ng-click="vm.selected = result;"
ng-class="{selected: result === vm.selected}"
ng-init="displayNumber = vm.incrementDisplayIndex();">
<h4 class="list-group-item-heading">{{result.description}} - {{result.name !== vm.model.name}}</h4>
<p class="list-group-item-text">
{{result.name}}
</p>
</li>
</ul>
ので、フィルタの名前はvm.resultFilter
で、フィルタが更新されるたびに呼び出されたcooresponding方法がありますupdateFilter()
(これはページ区切りに必要です)。
function updateFilter() {
vm.filteredResults = $filter('filter')(vm.results, {
'name': vm.resultFilter,
'description': vm.resultFilter
});
vm.totalItems = vm.filteredResults.length;
vm.noOfPages = Math.ceil(vm.filteredResults.length/vm.itemsPerPage);
}
フィルタリングを100%実行するのに問題があります。時には、それは説明フィールドでのみフィルタリングされているように見えますが、時には、1つの結果の説明フィールドにある単語を検索し、結果のないフィルタリングを行います(false)。任意のヒントをいただきました。
の代わりに
includes
を使用する必要があります。結果は、結果が名前と説明の両方に一致しなければならないことを意味します。 –私はあなたが意味するものを理解していますが、どこにでもAND演算子を使用していませんか?両方のフィールドを 'vm.resultFilter'に指定しない限り、何が起こっているのでしょうか?その場合、どうすればそれを 'OR'演算子にするのですか? – erp
両方のフィールドをポイントすると、AND条件でフィルタが機能します。これは役に立つかもしれないhttp://stackoverflow.com/questions/15868248/how-to-filter-multiple-values-or-operation-in-angularjs –