可编辑数据表中的PrimeNg下拉列表未保留所选值

时间:2017-11-16 22:54:31

标签: angular primeng-datatable primeng-dropdowns

以下是数据表

中列的代码



<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>
&#13;
&#13;
&#13;

ts代码填充droupdown

&#13;
&#13;
 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 });
      }
    });
  }
&#13;
&#13;
&#13;

每当我编辑网格时,下拉列表会显示&#34;请选择&#34;而不是显示选定的组织名称。 当我打印&#34; csp.organization.organizationId&#34;它给出了选定的organizationId,但[(ngModel)]似乎没有设置所选的值。

我哪里错了?

2 个答案:

答案 0 :(得分:1)

出现同样的问题,我发现,在我的情况下,当下拉列表仍为空时,应用程序正在尝试搜索ngModel中设置的值。

解决方案是添加一个* ngIf以确保列表不为null,在你的情况下它会像这样生成:

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

希望这会有所帮助:)

答案 1 :(得分:0)

我通过调用下拉列表的方法(onfocus)并执行dropdown.updateSelectedOption(val)修复了这个问题。在方法中。

&#13;
&#13;
 <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>
&#13;
&#13;
&#13;

ts代码:

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