angular - Kontrollera elementet i columnoptions för p-multiSelect PrimeNG, lägg till den aktuella kolumnen i slutet av arrayen
Finns det någon lösning för att få kryssruta/avmarkera-elementet i PrimeNG p-multiselect att behålla de bundna arrayens kolumner i ordning?
(faktiskt, när vi avmarkerar ett element försvinner det från arrayens kolumner, men när vi markerar det igen läggs kolumnen till i slutet av arrayen och inte på det ursprungliga indexet)
Svar #1
Vad du kan göra är att lägga till en position-egenskap i dina options. Sedan är allt du behöver göra att lägga till onChange-händelsen och ordna om selectedOptions med position-egenskapen.
HTML
<p-multiSelect [options]="cars" [(ngModel)]="selectedCars1" [panelStyle]="{minWidth:'12em'}" (onChange)="reorderValues($event)"></p-multiSelect>
TS
// add position property
this.cars.forEach(function (car, i) {
car.value = { position: i, value: car.value };
});
och
reorderValues(event) {
this.selectedCars1.sort(function (a: any, b: any) { return (a.position > b.position) ? 1 : ((b.position > a.position) ? -1 : 0); });
}
Redigera
Om du vill göra detta multivalfält obligatoriskt, lägg till validering på det.
validateForm() {
this.showMultiselectRequiredMessage = (this.selectedCars1.length === 0) ? true : false;
}
Se StackBlitz
