У меня такая вложенная структура ng-template
.
@Component({
selector: 'my-app',
template: `
<list>
<ng-template *ngFor="let item of Items" #ListItem>
<ng-template #ListItemLine>{{ item[0] }}</ng-template>
<ng-template #ListItemLine>{{ item[1] }}</ng-template>
<ng-template #ListItemLine>{{ item[2] }}</ng-template>
I can see this line, but can't get above templates
</ng-template>
</list>
`,
})
export class App {
Items: Array<Array<string>> = [
[ "1-1", "1-2", "1-3", ],
[ "2-1", "2-2", "2-3", ],
[ "3-1", "3-2", "3-3", ],
[ "4-1", "4-2", "4-3", ],
[ "5-1", "5-2", "5-3", ],
]
}
Как я могу визуализировать детей ng-component
в моем компоненте:
@Component({
selector: 'list',
template: `
<ul>
<li *ngFor="let item of Items">
<ng-container *ngTemplateOutlet="item"></ng-container>
</li>
</ul>
`,
})
export class ListComponent {
@ContentChildren('ListItem') public Items;
}
Plunkr https://plnkr.co/edit/Hi1ZqPAAYyIbclUuzRrl?p=preview
Заранее спасибо.
Обновить
В конце я хочу обернуть компоненты Angular Material в свои компоненты, поэтому, если я найду более лучший пользовательский интерфейс, чем материал, мне не придется менять все гарантии компонентов материала в моей программе, мне просто нужно будет изменить реализацию моего компоненты пользовательского интерфейса оболочки.
Например, попробуем обернуть mat-list
компонент. Мне нужно сделать обертку для mat-list
контейнера, назовем его my-list
:
@Component({
selector: 'my-list',
template: `
<mat-list>
<ng-content></ng-content>
</mat-list>
`,
})
и обертка для mat-list-item
:
@Component({
selector: 'my-list-item',
template: `
<mat-list-item>
<ng-content></ng-content>
</mat-list>
`,
})
Результатом рендеринга HTML будет:
- my-list
- mat-list
- my-list-item
- mat-list-item
- ...
- my-list-item
- mat-list
Каждый компонент материала окружен моей оболочкой, поэтому директивы и стили, поставляемые с материалом, не будут работать.
ng-template
дает мне возможность визуализировать его содержимое без элемента оболочки, поэтому вложенная структураng-template
должна дать мне возможность визуализировать дерево элементов без оболочки. В конце я хочу инкапсулировать компонент списка материалов внутри моего компонента и иметь возможность использовать такие директивы, какmatLine
, которые не работают, если они завернуты. - person Vladimir   schedule 21.11.2017