2016-11-01 154 views
2

我想要實現的是基於哪個組件的父組件的不同行爲。所以在以下兩種情況下,孩子的行爲會略有不同。Angular 2子組件檢查父組件

例如一個

<parent-a> 
<child></child> 
</parent-a> 

例B

<parent-b> 
<child></child> 
</parent-b> 

我試着做以下

constructor(
    el: ElementRef) { 
     this.el = el; 
    } 

    ngAfterViewInit() { 
    const hostElem = this.el.nativeElement; 
    console.log(hostElem); 
    console.log(hostElem.children); 
    console.log(hostElem.parentNode); 
    } 

eventhough ngAfterViewInit是有點晚了我,我還有空的parentNode

有什麼辦法可以實現這樣的事情嗎?

+0

這不是它應該如何工作。相反,將來自父母的輸入傳遞給孩子,告訴其如何行事。 –

+0

是啊,它已經這樣做(與服務),但如果父母不是我期望的那種? (我基本上建立一個Api)。我基本上想給錯誤/警告與預期的父節點列表 – elasticrash

回答

2

如果您需要實際的組件(而不是節點元素),則可以使用噴射器。

constructor(private parentB: ParentBComponent){ 
} 

ngAfterViewInit() { 
    this.parentB.someMethod() 
} 

注意,您必須parent-aparent-b,如果你希望能夠注入的任何定義一個基本組件,並有來自它既parent-aparent-b繼承。

你可以把它可選的,你可以使用Optional裝飾:

constructor(@Optional() private parentB?: ParentBComponent){ 
} 
+0

,如果沒有,我可以拋出一個錯誤,我猜。那可能會。我試圖在接受它之前嘗試它;) – elasticrash

+0

含義,如果它不在該父項的上下文中?在那種情況下,成員'parentB'將是未定義的。 – Meir

+0

一般強烈不建議使用html元素(parentNode等),嘗試在框架內完成工作並使用Renderer進行更新 – Meir