2016-03-16 17 views
5

Ben özyinelemeli bu mesajların ele alındığı gibi bileşenleri ve plnkr dağıtmak çalışıyorum:Angular2 özyinelemeli bileşenleri

How do I inject a parent component into a child component?

> `http://plnkr.co/edit/l7jsV0k7DbGJGXPFlSPr?p=preview` 
Ancak

Angular2 Recursive Templates in javascript

, çözüm bileşeni nesneler kendilerini başa sadece sağlanan ve bileşenlerin gerçekleştirmesi beklenen HTML etiketlerinin konusunu çözmüyoruz.

Alt öğe, şablonunun içinde <parent> ... </parent> html etiketini nasıl kullanabilir?

Size yardımcı olabileceğiniz yardım ve belki de bir plunkr/fiddle için çok minnettar olurum.

İSTİSNA: Beklenmeyen yönerge değeri senin kadar bileşen 'ChildComponent'

ait View 'tanımsız' döngüsel bağımlılık nedenleri yüzünden

+0

Ben sadece telefondayım ve Plunker koşamam ama yozr cevaba göre size 'forwardRef' eksik: Benim örnekte koşul ebeveyn bileşeninde giriş parametresidir. Nasıl kullanılacağını gösteren bazı cevaplar var. (downvote ben değildim) –

+0

forwardRef bağımlılık enjeksiyon problemini çözmez çünkü bu sadece Angular geçerli bileşende kullanılan direktiflerin bağımlılıklarını çözmek için çalıştığında istisna neden olan dairesel bağımlılıktır. Ayrıca, çocuk bileşeni için koşul gibi kullanılan parsel bileşeninde boole girdisi gibi bayraklar gibi kullanılan durum ifadeleri de bu durumda çalışmaz. Soru şu ki bu problem için uygun bir istisna yok mu? –

+1

neden Angular1 ile Angular2 değil, bu mümkün oldu? Bunu başarmak için dinamikComponentLoader kullanmayı nasıl deneyebiliriz? –

cevap

2

arzulanan sonuç yalnızca şablonları kullanarak mümkün değildir this Plunker numaralı telefondan, bir şeyler yanlış gittiğine dair bir işaret görülebilir (genel DI sorunu, Açısal olmayan).

ParentComponent çocuğa bağımlı:

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() {} 
} 

Bunu example gördüğünüz ama unutmayın olarak DynamicComponentLoader kullanarak bunu başarabilirsiniz Ancak: döngüsel bağımlılığı neden olan ebeveyn üzerinde

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 bağımlı sonsuz bileşen oluşturmayı durdurmak için bir çeşit koşul sağlamak.

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; 
} 
+1

not DynamicComponentLoader artık ComponentResolver ve/veya ComponentFactoryResolver ile değiştiriliyor –