Угловой динамический рендеринг шаблона, такой как шаблон ячейки пользовательского интерфейса (шаблон объявлен в colDefs родительского элемента) - PullRequest
0 голосов
/ 14 февраля 2019

Angular (7) рендеринг динамического шаблона (ng-template) как шаблон ячейки пользовательского интерфейса (шаблон объявлен в colDefs родительского элемента);Я пробовал так много раз, так как более 30 дней смотрел видео, статьи по рендерингу ng-шаблонов, но не смог найти никакого решения, пожалуйста, помогите мне здесь.

Заранее спасибо:)

app.component.ts

export class AppComponent implements OnInit {
name = 'Angular';
gridOptions:any;

constructor(private http: HttpClient){}


ngOnInit(){

  this.gridOptions = {
    colDefs:[
     {name:'id', displayName:'ID',width:80},
     {name:'name', displayName:'Name'},
     {name:'username', displayName:'Username', cellTemplate:'Static text from template'},
     {name:'email', displayName:'Email', cellTemplate:'{{row[col.name]}}'},  // i tried like this
     {name:'phone', displayName:'phone', cellTemplate:"<strong style='color:blue'> + row[col.name] + </strong>"}, // I need to achive this kind of template like ui grid for angularjs
     {name:'website', displayName:'website', cellTemplate:'row[col.name]'}, // i tried like this also
    ]
   }

   this.http.get("https://jsonplaceholder.typicode.com/users").subscribe((res) =>{
    this.gridOptions.data = res;
  });

 }

}

data-table.component.ts

export class DataTableComponent implements OnInit {
@Input() gridOptions: any = [];
  constructor() { } 

  ngOnInit() {}
}

таблица данных.component.html

<table>
    <tr>
        <th *ngFor="let col of gridOptions.colDefs">{{col.name}}</th>
    </tr>

    <tr *ngFor="let row of gridOptions.data ;let i = index">
        <td *ngFor="let col of gridOptions.colDefs">
            <ng-container *ngIf="!col.cellTemplate else myTemplate" [ngTemplateOutlet]="myTemplate">
                {{row[col.name]}}
            </ng-container>
            <ng-template #myTemplate row="row" col="col">
                {{col.cellTemplate}}
            </ng-template>

            <!-- <ng-template #myTemplate row="row" col="col" innerHTML="col.cellTemplate}"></ng-template> -->
        </td>
    </tr>
</table>

app.component.html

<app-data-table [gridOptions]="gridOptions"></app-data-table>

a busy cat

StackBlitz DEMO

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Проверьте StackBlitz демо, которое я создал для вас.Он использует функцию рендеринга cellFn, в которой вы можете настроить шаблон по своему усмотрению.Также обратите внимание на использование safeHtml pipe для рендеринга html внутри шаблона.

EDIT : Как указано в комментариях OP, он также хочет использовать в шаблоне угловые директивы и т. Д.Так что вот демо StackBlitz для этой цели.

0 голосов
/ 14 февраля 2019

Насколько я знаю, DataTables не поддерживает какую-либо угловую магию.Я справился с подобными проблемами с функциями рендеринга, которые предлагает вам DataTables: https://datatables.net/reference/option/columns.render#function

Например, вам нужно изменить строку:

{name:'email', displayName:'Email', cellTemplate:'{{row[col.name]}}'},

на:

{name:'email', displayName:'Email', render:(data, type, row, meta) => 'contact ' + row.name + ' via E-Mail'},

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...