Выпадающий список Primeng DataTable не работает с параметрами в столбце

Я делаю повторно используемый компонент таблицы для своего приложения на основе DataTable от PrimeNG.

Мой компонент имеет следующий html-код:

<p-dataTable [value]="cars" [rows]="5" [paginator]="true"  [globalFilter]="gb" [(selection)]="selectedValue" (onRowSelect)="onRowSelect($event)" #dt>
    <p-column *ngIf="hasSelectCheckbox"  [style]="{'width':'38px'}" selectionMode="single"></p-column>
    <p-column *ngIf="hasExpander" expander="true" styleClass="col-icon"></p-column>

     <p-column *ngFor="let col of cols" [field]="col.field" [header]="col.header" [sortable]="col.sortable" [filter]="col.hasFilter" filterPlaceholder="{{col.filterPlaceholder||'Search'}}" filterMatchMode="{{col.filterMatchMode}}">


        <ng-template *ngIf="col.hasDropdownFilter" pTemplate="header" let-col>
            <p-dropdown [options]="brands"  appendTo="body" [style]="{'width':'100%'}" (onChange)="myfilter($event.value,col.field,col.filterMatchMode); dt.filter($event.value,col.field,col.filterMatchMode); " styleClass="ui-column-filter"></p-dropdown>
        </ng-template>

     </p-column>

</p-dataTable>

И в .ts у меня есть

cars: Car[] = [];
    selectedValue: Car;

    hasSelectCheckbox = true;
    hasExpander = false;

    brands: SelectItem[] = [];

    cols: any[] = [];

     ngOnInit() {

 this.brands = [
            {label: 'Select a Brand', value: null},
            {label: 'VW1', value: 'VW1'},
            {label: 'VW2', value: 'VW2'},
            {label: 'VW3', value: 'VW3'},
            {label: 'VW4', value: 'VW4'}
        ]

        this.cols = [
                    // tslint:disable-next-line:max-line-length
                    {field: 'vin', header: 'Vin', sortable: true, hasFilter: true, filterPlaceholder: null, filterMatchMode: 'contains' , hasDropdownFilter: null, hasMultiSelectFilter: null, dropdownItems: null},
                    {field: 'year', header: 'Year', sortable: true, hasFilter: false, filterPlaceholder: null, filterMatchMode: 'contains' , hasDropdownFilter: null, hasMultiSelectFilter: null, dropdownItems: null},
                    // tslint:disable-next-line:max-line-length
                    {field: 'brand', header: 'Brand', sortable: false, hasFilter: false, filterPlaceholder: null, filterMatchMode: 'equals' , hasMultiSelectFilter: null, hasDropdownFilter: true, dropdownItems: this.brands },
                    {field: 'color', header: 'Color', sortable: true, hasFilter: false, filterPlaceholder: null, filterMatchMode: 'contains' , hasDropdownFilter: null, hasMultiSelectFilter: null, dropdownItems: null}
                ];

        /* this.carService.getCarsSmall().then(cars => this.cars = cars); */
        this.cars.push(
        {vin: 'Somet0', year: 1998, brand: 'VW1', color: 'White1'},
        /* fill some data*/
        );

        }

И все работает.

Поскольку я хочу иметь повторно используемый компонент, я хочу сделать выпадающие элементы зависимыми от элемента столбца. Но если я использую col.dropdownItems вместо brands, раскрывающийся список не получит элементы.

Есть ли решение для этого?


person Gabriel Costa    schedule 24.07.2017    source источник
comment
Щелкните все теги, прочтите их описание. Вы их все используете?   -  person Kukeltje    schedule 24.07.2017
comment
Это зависит от того, какой тип воротника у меня будет   -  person Gabriel Costa    schedule 25.07.2017


Ответы (1)


Каким-то образом "let-col" в html мешает моей итерируемой переменной "col". Я изменил имя «col» на «itemCol» во всех его экземплярах, и проблема была решена.

person Gabriel Costa    schedule 25.07.2017