親ディレクティブから子構造ディレクティブにアクセスしようとしています。親構造ディレクティブから子構造ディレクティブにアクセスできない
これは私が子供のディレクティブはアクセスできない理由はわからないんだけど、私は子供
@Directive({
selector: '[appChildStruralDirective]'
})
export class ChildStruralDirective {
constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private renderer: Renderer) {
this.viewContainer.createEmbeddedView(this.templateRef);
}
ngAfterViewInit(): void {
}
}
@Directive({
selector: '[appParentStruralDirective]'
})
export class ParentStruralDirective {
@ViewChild(ChildStruralDirective) viewChild: ChildStruralDirective;
@ContentChild(ChildStruralDirective) contentChild: ChildStruralDirective;
constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private renderer: Renderer) {
this.viewContainer.createEmbeddedView(this.templateRef);
}
ngAfterViewInit(): void {
console.log('ngAfterViewInit:viewChild', this.viewChild);
console.log('ngAfterViewInit:contentChild', this.contentChild);
}
ngAfterContentChecked(): void {
console.log('ngAfterContentChecked:viewChild', this.viewChild);
console.log('ngAfterContentChecked:contentChild', this.contentChild);
}
}
@Component({
selector: 'my-app',
template: `
<h1 *appParentStruralDirective>
<span *appChildStruralDirective>Hello world</span>
</h1>
`,
})
export class App {
constructor() {
}
}
にアクセスしようとしている方法です。
問題を示すためにplunkrを作成しました。
https://plnkr.co/edit/deQC6cY4oHuNdKbzsfhE?p=preview
これが動作しない理由を私に知らせてください。
PS:私は両方ともViewChild & ContentChild(おそらく候補者)として使用していますが、これはこれらが動的に生成される要素なのでどちらに該当するかはわかりません。
あなたは、サービスの子の構造ディレクティブを登録するためのサービスを注入することができます。 –
それはDIを持っているの目的を破る –
AFAIKそれは動作しません。 githubで問題を作成するhttps://github.com/angular/angular/issues – yurzui