Я могу сохранить фильтры локально, используя stateStorage="local"
stateKey="myKey"
. Поэтому, когда пользователь покидает компонент и возвращается, данные по-прежнему фильтруются на основе установленных фильтров.
Проблема в том, что пользователь не имеет представления о том, что он фильтрует, так как заголовки фильтров больше ничего ему не показывают, только метка по умолчанию. Я могу получить доступ к фильтрам через локальное хранилище и удалить их, используя localStorage.removeItem("myKey");
, но я не могу понять, как заставить эту информацию фильтра отображаться в заголовках фильтров. Мы не используем lazyLoad, как предлагается в другом ответе. Вы могли бы подумать, что это будет сделано в любое время, когда сохранен фильтр, потому что незнание того, что вы фильтруете, кажется серьезным недостатком.
Для большей ясности я приложил ниже документацию по primeFaces. Если вы выберете «Красный», «Белый» и «Зеленый» из выпадающего списка с несколькими выборками, он отобразит выбранный вами фильтр в заголовке (Красный, Белый, Зеленый) выше. Мне нужно, чтобы эта информация отображалась каждый раз, когда пользователь входит в компонент, если у него есть сохраненные фильтры (как с вводом текста, так и с раскрывающимися списками).
https://www.primefaces.org/primeng/#/table/filter
Я использую множественный выборвыпадающие фильтры, ввод текста, а также фильтры календаря. Вот фрагмент HTML, который включает примеры этих трех типов фильтров:
<th *ngFor="let col of columns" [ngSwitch]="col.field">
<input *ngSwitchCase="'userID'" pInputText type="text" size="12" placeholder="contains" (input)="table.filter($event.target.value, col.field, col.filterMatchMode)" [value]="table.filters['userID'] ? table.filters['userID'].value : ''">
<div class="ui-g ui-fluid">
<p-calendar #calendar1 class="ui-fluid" *ngSwitchCase="'myDate'" [monthNavigator]="true" [showOnFocus]="false" [yearNavigator]="true" yearRange="2010:2060" [showIcon]="true"
[showOtherMonths]="false" [showButtonBar]="true" [appendTo]="attach" [style]="{'overflow': 'visible'}"
[(ngModel)]="calendar1Filter"
(ngModelChange)="table.filter($event, 'myDate', calendar1Option)"
(onSelect)="table.filter($event, 'myDate', calendar1Option)">
<p-footer>
<div class="ui-grid-row">
<div class="ui-grid-col-3"><label style="font-weight: bold; color: #337ab7">Mode:</label></div>
<div class="ui-grid-col-6"><p-dropdown [options]="calendar1Options" [style]="{'width':'60px', 'padding-top': '0px'}" [(ngModel)]="calendar1Option" (onChange)="onChangeModCalOpt(calendar1, 1)" ></p-dropdown> </div>
</div>
</p-footer>
</p-calendar>
</div>
<div class="ui-fluid">
<p-multiSelect *ngSwitchCase="'myDropdown'" appendTo="body" [options]="dropdownOptions" pInputText type="text" size="12" [style]="{'width':'100%'}" defaultLabel="All" [(ngModel)]="myDropdownFilter" (onChange)="table.filter($event.value, col.field, 'in')"></p-multiSelect>
</div>
</th>