Вы можете использовать встроенный вид с проекцией ngTemplateOutlet
. Оберните свой контент в пределах <app-nav>
тегов в <template>
. Чем в вашем NavComponent
найдите это TemplateRef
с ContentChild
и вставьте этот шаблонRef в контекст передачи шаблона компонента, который содержит вашу переменную названия. Что-то вроде этого:
@Component({
selector: 'app-nav',
templateUrl: './nav.component.html',
styleUrls: ['./nav.component.scss']
})
export class NavComponent {
title: string = 'This is my title';
@ContentChild('defaultTemplate') defaultTemplate = null // get templateRef
}
В nav.component.html создать выход шаблона с контекстом по отношению шаблона
<template [ngOutletContext]="{ title: title }" [ngTemplateOutlet]="defaultTemplate"></template>
....other component content....
А потом вместо компонента использования:
<app-nav>
<template #defaultTemplate let-title="title">
nav works! {{ title }}
</template>
</app-nav>
UPD:
Адрес plunk с примером
в app/some.component.ts
есть ngTemplateOutlet
проекция из app/app.component.ts
template
UPD:
Хорошо, есть способ, чтобы получить исходное содержание от index.html в компонент. Вы можете использовать функцию APP_INITIALIZER
, которая будет выполняться при инициализации приложения.
Вот plunk
- См
app/root-template.initializer.ts
В app/app.component.ts
я просто заменить соответствующую недвижимость с исходным содержанием. Это немного Hacky способом и должно быть сделано путем замены шаблона в ComponentMetadata
, который получен с Reflect.getMetadata:
const annotations = Reflect.getMetadata('annotations', NavComponent)
const meta = annotations.find(annotation => annotation instanceof ComponentMetadata)
meta.template = meta.template.replace(
'{{ someVarInTemplate }}',
'initialContentInIndex'
)
Таким образом, компонент шаблон будет иметь начальное содержание индекса, и он будет проанализирован угловым , Подробнее о Reflect here
не работал, он был заменен на 'nav.component.html' содержания – Basit
Ну, он должен работать. Возможно, где-то есть ошибка. Я обновил свой ответ с помощью плунжерной демонстрации, как это должно быть реализовано. –
На самом деле я хотел поместить этот 'nav works {{title}}' inside' Загрузка ... 'my-app tag .. в основном это' приложение -nav' является корневым компонентом, а не субкомпонентом. Возможно ли это? –
Basit