il risultato desiderato non è possibile utilizzando solo i modelli perché le cause dipendenza circolare:
eccezione: il valore di direttiva imprevisto 'undefined' sulla vista del componente 'ChildComponent'
come si può vedere su this Plunker che è un segno che qualcosa è andato storto (problema di DI generale non angolare).
ParentComponent dipendente da bambino:
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 dipende madre che provoca la dipendenza circolare:
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() {}
}
Tuttavia è possibile ottenere questo utilizzando DynamicComponentLoader come si può vedere in questa example ma ricordate per fornire una sorta di condizione per fermare il rendering infinito del componente. Nel mio esempio, la condizione è parametro di ingresso nella componente principale:
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;
}
fonte
2016-03-16 20:25:53
Io sono solo sul mio telefono e non posso correre il vostro Plunker, ma secondo yozr risposta ti manca 'forwardRef'. Ci sono alcune risposte che dimostrano come usarlo. (downvote non ero io) –
forwardRef non risolve il problema dell'iniezione di dipendenza perché questa è semplicemente una dipendenza circolare che causa un'eccezione quando Angular tenta di risolvere le dipendenze per le direttive utilizzate nel componente corrente. Anche le istruzioni di condizione utilizzate come contrassegni come l'input booleano nel componente parrent utilizzato come condizione per l'esistenza del componente figlio non funzionano in questo caso. La domanda è perché non c'è un'eccezione appropriata per questo problema? –
perché è stato possibile farlo con Angular1 e non Angular2? Come si potrebbe provare a utilizzare dynamicComponentLoader per raggiungere questo obiettivo? –