如何使用Angular 2将选定的p-dropdown项添加到primeng p-datatable列表?

时间:2017-12-29 21:40:45

标签: angular primeng

我有一个带有p-downdown的primeng pdatatable,我想从p-dropdown中选择一个项目,并使用onChange事件将其添加到p-datatable(开头为空),它显示添加的项目ng,但它没有p-datatable,我应该改变什么?感谢

PS。我正在使用角度2

在组件中:

         ...
    public existencias: Existencia[] = [];
    public ex_pd: Existencia[] = [];
    public medicamentos: SelectItem[];
              ...
    private getAllExistencias() {
            this.existenciaService
                .getAllExistencias()
                .subscribe(
                data => {
                    this.existencias = data;
                    this.medicamentos = [];
                    for (let i = 0; i < this.existencias.length; i++)
                    {
                        this.medicamentos.push({ label: this.existencias[i].medicamento.nombre , value: this.existencias[i].medicamento.nombre });
                    }
                },
                error => console.log(error),
                () => console.log('Complete')
                );
        }

 public addMedicamento(medic: string) {//

         let e = this.existencias.filter(e => e.medicamento.nombre == medic);
         this.ex_pd.push(e[0]);
     }

在模板中:

这种方式有效:

<tr *ngFor="let pd of ex_pd; let i = index">

但这样在p-datatable中没有显示任何内容:

<p-dataTable [value]="ex_pd" ...>
        <p-header>Listado de Medicamentos ...</p-header>
        <p-column field="medicamento.nombre" header="Nombre" ... >
            <ng-template pTemplate="filter" let-col>
                <p-dropdown [options]="medicamentos" [style]="{'width':'100%'}" (onChange)="addMedicamento($event.value)" styleClass="ui-column-filter"></p-dropdown>
            </ng-template>
        </p-column>
     <p-column field="medicamento.cantidad" header="Cantidad" ... >
        ...

2 个答案:

答案 0 :(得分:0)

确保“immutable”属性设置为false。此属性默认为true,它对我造成了类似于您所说的错误。

<p-dataTable [immutable]="false" ...>

https://www.primefaces.org/primeng/#/datatable

答案 1 :(得分:0)

是的,他说这是正确的,但可能最好的方法是遵循不变的原则!

这意味着您必须始终重新创建数组/对象。怎么这么容易?

//use spread operator
newArr = [...oldArr];

//use Object.Assign
newArr = Object.assign([], oldArr)