2016-11-01 116 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