Раскрывающийся список PrimeNg в редактируемой таблице данных не содержит выбранное значение

Ниже приведен код столбца в таблице данных.

<p-column field="organization.description" header="Partner" [editable]="dtCostShare" [style]="{'width':'30%'}">
                                                                               <ng-template let-col let-csp="rowData" pTemplate="editor">
 <span class="required-lbl">*                                                         <p-dropdown name="organization" [(ngModel)]="csp.organization.organizationId"  (onChange)="addPartnerDescription(csp.index)"  [options]="partners" [style]="{'width':'10px'}" appendTo="body" [ngClass]="{'errorCol':csp.organization.organizationId === ''}">
</p-dropdown>
 </span>
 <span *ngIf="(csp.organization.organizationId === '' )" class="text-danger">Partner is required</span>
  </ng-template> </p-column>

ts код для заполнения раскрывающегося списка

 getPartners() {
    this.partners.push({ label: 'Please Select', value: '' });
    this.parameterService.getPartners().subscribe((data) => {
      for (let record of data) {
        this.partners.push({ label: record.description, value: record.organizationId });
      }
    });
  }

Всякий раз, когда я редактирую сетку, в раскрывающемся списке отображается «Пожалуйста, выберите» вместо отображения выбранного имени организации. Когда я печатаю «csp.organization.organizationId», он дает выбранный идентификатор организации, но [(ngModel)], похоже, не устанавливает выбранное значение.

где я ошибаюсь?


person user1613338    schedule 16.11.2017    source источник


Ответы (2)


У меня была та же проблема, я обнаружил, что в моем случае приложение пыталось найти значение, установленное в ngModel, когда раскрывающийся список все еще был пуст.

Решение состояло в том, чтобы добавить *ngIf, чтобы убедиться, что список не нулевой, в вашем случае это будет что-то вроде этого:

<p-dropdown *ngIf="partners != null && partners.lenght > 0"
name="organization" [(ngModel)]="csp.organization.organizationId"...

Надеюсь, это поможет :)

person Will_plat    schedule 17.11.2017
comment
Большое спасибо. Ваше решение сработало. я изменил условие if, чтобы проверить длину ›1. Теперь проблема в том, что если у меня есть более одной строки в таблице данных, выбранное значение для раскрывающегося списка в последней строке устанавливается для всех остальных строк. - person user1613338; 20.11.2017

Я исправил это, вызвав метод (onfocus) раскрывающегося списка и выполнив dropdown.updateSelectedOption(val); в методе.

 <p-dropdown #dd1 name="organization" [(ngModel)]="csp.organization.organizationId"  placeholder="Please Select" (onFocus)="setSelectedPartner(dd1,label of the selectItem,value of the selectItem)" [options]="SelectItemList" ></p-dropdown>

код ТС:

setSelectedPartner(dropdown: Dropdown,label:any ,val:any){
        if(val!='')
      dropdown.updateSelectedOption(val);       }

person user1613338    schedule 23.11.2017