望ましい結果は、テンプレートのみを使用することで可能ではありませんthis Plunkerに見ることができます。これは何かが間違っているという兆候です(一般的なDIの問題ではなく、角度の問題)。
子に依存parentComponentに:循環依存関係が発生し、親に依存
import {Component} from 'angular2/core';
import {AppComponent} from './app.component';
import {ChildComponent} from './child.component'
@Component({
selector: 'parent',
template: `<p>parent</p>
<child></child>`,
directives: [ChildComponent]
})
export class ParentComponent {
constructor() {}
}
ChildComponent:
import {Component} from 'angular2/core';
import {AppComponent} from './app.component';
import {ParentComponent} from './parent.component';
@Component({
selector: 'child',
template: `<p>child</p>
<parent></parent>`,
directives: [ParentComponent]
})
export class ChildComponent {
constructor() {}
}
あなたはこのexampleに見るが、覚えることができるよう、あなたがDynamicComponentLoaderを使用することによって、これを達成することができますしかし、無限のコンポーネントレンダリングを停止するための何らかの種類の条件を提供します。私の例では条件は親コンポーネントで入力パラメータです:
import {Component, Input} from 'angular2/core';
import {AppComponent} from './app.component';
import {ChildComponent} from './child.component'
@Component({
selector: 'parent',
template: `<p>parent</p>
<child *ngIf="condition"></child>`,
directives: [ChildComponent]
})
export class ParentComponent {
constructor() {
}
@Input() condition: bool;
}
私は自分の携帯電話上でだけだと、あなたのPlunkerを実行することはできませんが、yozrの答えによると、あなたは 'forwardRef'を逃しています。それを使用する方法を示すいくつかの答えがあります。 (downvote was not) –
forwardRefは、Angularが現在のコンポーネントで使用されているディレクティブの依存関係を解決しようとしたときに例外を引き起こす循環依存性であるため、依存関係注入の問題を解決しません。この場合、子コンポーネントの存在のための条件のように使用されるparrentコンポーネントのブール値入力のようなフラグのような条件文も機能しません。問題は、この問題に対する適切な例外が存在しない理由です。 –
Angular1ではなぜこれが可能でしたが、Angular2ではできませんでしたか?これを達成するためにdynamicComponentLoaderをどのように使用しようとしますか? –