2016-02-24 3 views
6

Я пытаюсь создать пользовательский datagrid, который может отображать данные как в виде карт, так и в более традиционных таблицах/списках/сетках. Я могу сделать это довольно легко, если я не хочу, чтобы шаблоны настраивались, как показано в этом plunkerAngular 2 multiple TemplateRef

Здесь у меня есть компонент my-grid, который получает передаваемые данные. Тогда я петля над данными и визуализации компонента card-view или list-view в зависимости от желаемого зрения, которая находится под контролем view toggle (код в app/my-grid.ts файле)

Я хочу, чтобы предоставить возможность передавать в пользовательские шаблоны, и я имею в виду что-то например:

<my-grid> 
    <card-view-template> 
    <template var-item> 
     <h4>{{item.name}}</h4> 
     {{item.home}} 
    </template> 
    </card-view-template> 
    <list-view-template> 
    <template var-item> 
     <span>{{item.name}}</span> 
     {{item.home}} 
    </template> 
    </card-view-template> 
</my-grid> 

Как я могу добраться до того, чего хочу, откуда я?

+0

Возможно, вы посмотрите на источник других структурных директив, таких как '* ngFor'. У меня был краткий взгляд, но у меня еще нет рабочего примера собственной реализации. –

ответ

4

Я был в состоянии решить мою проблему, как показан here

import {Component, Directive, ContentChild, TemplateRef} from 'angular2/core'; 

    @Directive({ 
     selector: 'card-view' 
    }) 
    export class CardViewComponent { 
     @ContentChild(TemplateRef) itemTmpl; 

     ngAfterContentInit() { 
     console.log('In CCV', this.itemTmpl) 
     } 
    } 

Надеется, что это помогает кому-либо еще, что сталкивается с подобной проблемой. Или, может быть, кто-то может мне точку на лучшее решение

Update: Для более новых версий NG2 (RC в момент написания этого), вам нужно будет использовать forwardRef() в некоторых случаях, как так:

@ContentChild(forwardRef(() => CardViewComponent)) cardViewComponent; @ContentChild(forwardRef(() => ListViewComponent)) listViewComponent;

+0

похоже, что он больше не работает – pleerock

+0

Он все еще работает для меня, как в бета-версии, так и в RC. Единственное отличие в RC заключается в том, что вам нужно использовать forwardRef(). Обновлен ответ –

Смежные вопросы