我有一個側面導航組件在許多頁面上使用。這不是一個單頁的網絡應用程序。它動態加載到切換菜單的父組件上。 ContentChild用於獲取子組件的句柄,以便通過設置@input overlayHidden來切換它。問題是ContentChild爲空。@ContentChild爲空的DynamicComponentLoader
打開調試控制檯運行此plunker。從第一頁點擊「Dashboard」,然後從第二頁點擊「切換菜單」查看空指針。
我在做什麼錯?
這是代碼。
import { Component, Input} from 'angular2/core';
import { Router } from 'angular2/router';
@Component({
selector: 'side-navigation',
template: `
<div id="overlay" [hidden]="overlayHidden">
<div id="wrapper">
<nav id="menu" class="white-bg active" role="navigation">
<ul>
<li><a href="#">Dashboard</a></li>
<li><a href="#">Help & FAQs</a></li>
<li><a href="#">Contact Us</a></li>
<li><a href="#">Log Out</a></li>
</ul>
</nav>
</div>
</div>
`
})
export class SideNavigationComponent {
@Input() overlayHidden: boolean;
}
import { Component,
DynamicComponentLoader,
Injector,
ContentChild, AfterContentInit
} from 'angular2/core';
import { Router, RouterLink } from 'angular2/router';
import { SideNavigationComponent } from './side-navigation';
@Component({
selector: 'dashboard',
template: `
<side-navigation id="side-navigation"></side-navigation>...
`,
directives: [
RouterLink,
SideNavigationComponent ]
})
export class DashboardComponent {
title = 'Dashboard';
@ContentChild(SideNavigationComponent)
sideNavigationComponent: SideNavigationComponent;
constructor(private _router: Router,
private _dcl: DynamicComponentLoader,
private _injector: Injector) {
this._router = _router;
this._dcl = _dcl;
this._injector = _injector;
this._dcl.loadAsRoot(
SideNavigationComponent,
'#side-navigation', this._injector);
}
toggleOverlay() {
this.overlayHidden = !this.overlayHidden;
this.sideNavigationComponent.overlayHidden = this.overlayHidden;
}
}
我建立了一個發佈/訂閱的解決方案,工程(除了與覆蓋div的「隱藏」屬性的問題),但我認爲這將是一個簡單的解決方案,如果我能得到它的工作。
您應該使用'loadNextToLocation'或'loadIntoLocation' https://github.com/angular/angular/issues/6223#issuecomment-193908465 –