Próbuję zbudować składnik wymienienie w Angular2 które ma elementy, kolumny i szablony dziedzinie przedmiotów od użytkownika komponentu. Tak próbuję użyć ngTemplateOutlet
i ngOutletContext
(które czytałem są eksperymentalne). Ale nie mogę zmusić go do działania.Nie można uzyskać ngTemplateOutlet pracować
Oto uproszczony komponent do wykazania, co próbuję zrobić:
<div *ngFor="let item of items>
<span *ngFor="let column of columns>
<template [ngOutletContext]="{ item: item }"
[ngTemplateOutlet]="column.templateRef"></template>
</span>
</div>
Oto Wykorzystanie składnika:
<my-component [items]="cars" [columns]="carColumns">
<template #model>{{item.model}}</template>
<template #color>{{item.color}}</template>
<template #gearbox>{{item.gearbox}}</template>
</my-component>
A oto przykład dane:
cars = [
{ model: "volvo", color: "blue", gearbox: "manual" },
{ model: "volvo", color: "yellow", gearbox: "manual" },
{ model: "ford", color: "blue", gearbox: "automatic" },
{ model: "mercedes", color: "silver", gearbox: "automatic" }
];
carColumns = [
{ templateRef: "model" },
{ templateRef: "color" },
{ templateRef: "gearbox" }
];
Oto plunker odtwarzający problem po zaadaptowaniu kodu zgodnie z komentarzem Günters: https://plnkr.co/edit/jB6ueHyEKOjpFZjxpWEv?p=preview
Czy starasz się przekazać 'TemplateRef' jako ciąg? Jeden sposób to zrobić https://plnkr.co/edit/3yM25cUVeP4fK0cxhpXp?p=preview – yurzui
Innym sposobem jest użycie 'ContentChildren' https://plnkr.co/edit/2Ohj12Gax6UaK6LJ5dwD?p=preview – yurzui
@yurzui Interesujące. Jak działa twoja wersja, a nie moja? Nie, kolumny muszą być listą obiektów, ponieważ przekazuję im dodatkowe informacje, takie jak nagłówek i czy obecnie powinien się wyświetlać, czy nie. Wydaje się, że jedyną różnicą między twoim plunker i moim jest to, że przekazujesz kolumny jako listę ciągów. – Hampus