Angular let-col не передает все свойства

Я пытаюсь передать дополнительные поля, чтобы помочь с обработкой. Вот как я определяю массив столбцов:

this.columns = [
        {field: 'vin', header: 'Vin', isMultiRowColumn: true },
        {field: 'year', header: 'Year', isMultiRowColumn: false},
        {field: 'brand', header: 'Brand', isMultiRowColumn: false},
        {field: 'color', header: 'Color', isMultiRowColumn: false}
    ];

Теперь, когда я запускаю приведенный ниже код:

<p-dataTable [value]="testData">
  <p-column *ngFor="let col of columns" [field]="col.field" [header]="col.header">
    <ng-template let-col let-dt="rowData" pTemplate="body">
     <span>{{dt[col.field] + '-' + col.isMultiRowColumn }}</span>
    </ng-template>
  </p-column>
</p-dataTable>

Я получаю это:

dsad231ff-undefined 2012-undefined  VW-undefined    Orange-undefined

Есть ли причина, по которой isMultiRowColumn не передается?

Спасибо за помощь


person Richard77    schedule 04.05.2019    source источник
comment
Вы добавили тег ‹/p-column›?   -  person Ehsan Kiani    schedule 04.05.2019
comment
@EhsanKiani это было скрыто, когда я вставил ей код. Я починил это. Спасибо   -  person Richard77    schedule 04.05.2019
comment
удалить let-col из ng-template.   -  person Fateme Fazli    schedule 04.05.2019
comment
@FatemeFazli. Это сработало. Теперь я хотел бы понять. Отличается ли let-col от let col of..? Я немного запутался в том, что можно определить в файле let-.   -  person Richard77    schedule 04.05.2019
comment
С помощью let-col свойство контекста $implicit становится доступным как col внутри шаблона для привязок. и вы выбрали col var в ng для того же, что и let-col, поэтому попробуйте изменить имя col var, например: *ngFor="let column of columns", и это сработает.   -  person Fateme Fazli    schedule 04.05.2019
comment
когда вы определяете let-col, он создает новую переменную, которая ссылается на столбец таблицы, имеющий свойство поля, и не ссылается на вашу переменную столбца, которая определена в ngFor, она имеет свойство поля, но не свойство isMultiRowColumn, поэтому попробуйте изменить свой переменная ngfor из col во что-то еще, например, столбец.   -  person Fateme Fazli    schedule 04.05.2019
comment
Ваш массив this.cols, но вы выполняете итерацию в шаблоне *ngFor="let col of columns", не должно ли это быть *ngFor="let col of cols"   -  person Sourav Dutta    schedule 04.05.2019


Ответы (1)


С помощью let-col свойство контекста $implicit становится доступным как col внутри шаблона для привязок. и вы выбрали col var в ngfor так же, как let-col, когда вы определяете let-col, он создает новую var, которая ссылается на таблицу col, которая имеет свойство поля, и не ссылается на вашу переменную col, которая определена в ngFor, она имеет свойство field, но не свойство isMultiRowColumn, поэтому попробуйте изменить переменную ngfor с col на что-то другое, например column:

также проверьте: Что такое let-* в шаблонах Angular 2?

<p-dataTable [value]="testData">
  <p-column *ngFor="let column of columns" [field]="column.field" [header]="column.header">
    <ng-template let-col let-dt="rowData" pTemplate="body">
     <span>{{dt[column.field] + '-' + column.isMultiRowColumn }}</span>
    </ng-template>
  </p-column>
</p-dataTable>

см. DEMO и нажмите кнопку и проверьте вход ваш браузер, чтобы увидеть, что такое col на самом деле.

person Fateme Fazli    schedule 04.05.2019