Я пытаюсь внедрить компонент в другой компонент макета? Я пытаюсь сделать это с помощью службы, но ничего не работает.
Мой макет:
AppComponent
|
AppLayoutComponent
|
------------------------------------------------------------
| | |
SecondarySidebarComponent DashboardComponent RightSidebarComponent
Я пытаюсь внедрить HelloWorldComponent в SecondarySidebarComponent из DashboardComponent
app-layout.component. html
<!-- Secondary sidebar-->
<template #secondarysidebar></template>
<!-- /secondary sidebar -->
<!-- Main content -->
<div class="content-wrapper">
<!-- Page header -->
<app-page-header></app-page-header>
<!-- /page header -->
<!-- Tabbar -->
<!-- /tabbar -->
<!-- Content area -->
<div class="content">
<router-outlet></router-outlet>
</div>
<!-- /content area -->
dashboard.component.ts
import { Component, OnInit, AfterContentInit, TemplateRef, ViewChild } from '@angular/core';
import { SecondarySidebarService } from '../shared/services/secondary-sidebar.service';
import { RightSidebarService } from '../shared/services/right-sidebar.service';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.component.html',
styleUrls: ['./dashboard.component.scss']
})
export class DashboardComponent implements AfterContentInit {
@ViewChild(TemplateRef) secondarysidebar: TemplateRef<any>;
constructor(private rightsidebar: RightSidebarService, private sidebar: SecondarySidebarService) {
}
ngAfterContentInit() {
this.sidebar.open(this.secondarysidebar);
}
}
second-sidebar.service.ts
import { Injectable, ComponentFactoryResolver, Injector, Inject, TemplateRef, ApplicationRef, Type, ViewChild, ViewChildren, ViewContainerRef } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { SecondarySidebarComponent } from '../layouts/secondary-sidebar/secondary-sidebar.component';
export type Content<T> = string | TemplateRef<T> | Type<T>;
@Injectable({
providedIn: 'root'
})
export class SecondarySidebarService {
@ViewChild('secondarysidebar') secondarysidebar;
componentRef: any;
constructor(private resolver: ComponentFactoryResolver,
private injector: Injector,
private appRef: ApplicationRef,
@Inject(DOCUMENT) private document: Document,
) { }
open<T>(content: Content<T>) {
console.log('try to load component...');
const factory = this.resolver.resolveComponentFactory(SecondarySidebarComponent);
this.componentRef = this.secondarysidebar.createComponent(factory);
}
}
Где я ошибаюсь ??
Спасибо.