Я предоставляю решение для первого.
У меня есть рабочее решение. Добавление этого вопроса, чтобы он помог другим.
Вот мой мультиселектор. Он находится внутри тегов таблицы, так как я отображаю множественный выбор в столбце таблицы.
Сама таблица находится внутри p-диалога.
Во-первых, в вашем файле compnent.ts декальрируйте переменную, в которой будут храниться ваши значения множественного выбора.
resultsFilter: SelectItem[];
Затем импортируйте SelectItem по ->
import { SelectItem } from 'primeng/components/common/api';
Затем в вашем ngOnInit добавьте значения множественного выбора ->
this.resultsFilter = [
{ label: 'Critical', value: 'Critical' },
{ label: 'Pass', value: 'Pass' },
{ label: 'Warning', value: 'Warning' }
];
Тогда в вашем HTML ->
<p-dialog
[visible]="someCondition"
header="Filter Test"
appendTo="body"
(onHide)="hideDialog()"
[modal]="true"
[draggable]="true"
[closable]="true"
[autoAlign]="true"
[contentStyle]="{ 'max-width': '85vw', 'max-height': '75vh' }"
[focusOnShow]="false"
(onShow)=" tableData.filter('Critical', 'result', 'in')"
>
Здесь важен метод (onShow). Он будет запускать фильтр при загрузке компонента. 'result' - это имя столбца, который я хочу отфильтровать.
Вот тег table, который содержит опции выбора нескольких элементов.
<p-table
#tableData
[value]="tableData"
[scrollable]="true"
[scrollHeight]="'40vh'"
overflow="auto"
selectionMode="single"
[loadingIcon]="'fa-spinner'"
[loading]="loadingResults"
[paginator]="false"
>
<p-multiSelect
[options]="resultsFilter"
defaultLabel="Critical"
[(ngModel)]="selectedFilter"
(onChange)="
tableData.filter($event.value, 'result', 'in')
"
[style]="{
width: '95%',
height: '25px',
'margin-top': '0.75rem'
}"
class="ui-column-filter"
appendTo="body"
[filter]="true"
maxSelectedLabels="0"
selectedItemsLabel="{0} selected"
></p-multiSelect>
Метод (onChange) автоматически фильтрует результаты на основе значения, выбранного в раскрывающемся фильтре. Имя здесь должно совпадать с идентификатором, который вы присвоили своей таблице. В этом случае это # tableData
В моем файле component.ts это то, что у меня есть ->
if (this.selectedFilter === undefined) {
this.selectedFilter = ['Critical'];
}
В моей функции hideDialog () это то, что я добавил. Причина этого заключается в том, что всякий раз, когда я закрываю диалоговое окно и открываю его, он всегда будет предварительно выбирать значение фильтра как «Критическое».
this.selectedFilter = ['Critical'];
Ожидаемый результат заключается в том, что фильтр должен быть предварительно выбран в соответствии со значением, установленным в файле component.ts, а данные, отображаемые в HTMl, должны автоматически фильтроваться на основе предварительно выбранного значения.
С вышеупомянутым решением это работает отлично.