[英]primeNG p-multiSelect with template driven form, dynamic options
我的表單中有兩個下拉列表。 當我單擊第一個下拉列表中的一個選項時,我會調用 API 以獲取第二個下拉列表的選項,即 p-multiselect。 我的問題是多選的選項沒有更新(沒有顯示選項)
<div class="col-sm-4 mb-3">
<label for="levelId">Livello Codici Promozionali</label>
<select
class="form-control"
name="levelId"
[(ngModel)]="campagna.levelId"
(change)="getCodiciPromozionali()"
>
<option></option>
<option
*ngFor="let type of promoCodeTypes"
[ngValue]="type.id"
[textContent]="type.description"
></option>
</select>
</div>
<div class="col-sm-4 mb-3">
<label for="codiciPromozionali">Codici Promozionali</label>
<p-multiSelect
id="codiciPromozionali"
name="codiciPromozionali"
[(ngModel)]="campagna.codiciPromozionali"
class="mb-3"
defaultLabel=""
maxSelectedLabels="3"
[options]="codiciPromozionaliList"
optionLabel="name"
dataKey="code"
selectedItemsLabel="{0} selezionati"
filterPlaceHolder="Cerca..."
[disabled]="!enableCodiciPromozionali()"
>
</p-multiSelect>
</div>
打字稿
getCodiciPromozionali() {
this.codiciPromozionaliList = [];
if(this.campagna.levelId){
this.campagneService.getPromoCode(this.campagna.levelId)
.subscribe(response => {
response.body['result'].forEach((item: any) => {
this.codiciPromozionaliList.push({
name: item.codice,
code: item.id,
})
});
})
}
}
Angular 會忽略對codiciPromozionaliList
數組的更改,因為對此數組的引用沒有更改。 您只需要通過創建新數組來觸發 Angular 更改檢測。
使用擴展運算符來做到這一點:
getCodiciPromozionali() {
if (this.campagna.levelId) {
this.campagneService.getPromoCode(this.campagna.levelId)
.subscribe(response => {
const result = [];
response.body['result'].forEach((item: any) => {
result.push({
name: item.codice,
code: item.id,
});
});
this.codiciPromozionaliList = [...result];
});
}
}
或者你可以使用Array.prototype.map()
getCodiciPromozionali2() {
if (this.campagna.levelId) {
this.campagneService.getPromoCode(this.campagna.levelId)
.subscribe(response => {
this.codiciPromozionaliList = response.body['result'].map((item: any) => ({
name: item.codice,
code: item.id,
}),
);
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.