Angular NG2:我怎样才能通用地访问父组件?

Angular NG2:我怎样才能通用地访问父组件?,angular,Angular,在开始之前,请注意,我最初是在angular2 github网站上作为功能请求提出这个问题的。然而,请求被关闭了,有人建议我把它张贴在这里。 这里我只是重复我最初的要求。但是,您可以通过以下链接找到一些讨论: 我需要能够获得对父组件的引用,而不需要子组件知道父组件的类型。基本上我需要这样的东西(伪代码): @组件({ 模板:“” 指令:[儿童] }) 类ParentComponent{} @组件({选择器:'子'}) 类子组件{ 构造函数(@Parent()_Parent:any){} }

在开始之前,请注意,我最初是在angular2 github网站上作为功能请求提出这个问题的。然而,请求被关闭了,有人建议我把它张贴在这里。 这里我只是重复我最初的要求。但是,您可以通过以下链接找到一些讨论:

我需要能够获得对父组件的引用,而不需要子组件知道父组件的类型。基本上我需要这样的东西(伪代码):

@组件({
模板:“”
指令:[儿童]
})
类ParentComponent{}
@组件({选择器:'子'})
类子组件{
构造函数(@Parent()_Parent:any){}
}
基本上,我需要
ChildComponent
\u parent
字段来引用
ParentComponent
。但是请注意
\u parent
的类型是如何
any
。它是
any
,因为它可以是任意的
ChildComponent
是一种通用组件,可由任何类型的其他组件使用。我知道有解决这个问题的办法,但都需要孩子知道父母的类型。事情是这样的:

@组件({selector:'child'})
类子组件{
构造函数(_parent:ParentComponent){}
}
但同样,这对我来说不起作用,因为
ChildComponent
可以用于任何类型的其他组件,并且两个组件都不知道另一个组件的类型。因此,我需要的是一些通用的方法来注入
ChildComponent
它的父组件,就像在组件树中设置的那样,而
ChildComponent
不知道父类型。有人知道我是如何做到这一点的吗?

你也可以这样做

对于Angular2最新版本和旧版本:

从'@angular/core'导入{Injector};
从“/app.component”导入{AppComponent};
@组件({选择器:'子'})
类子组件{
建造师(专用注射:注射器){
让parentComponent=this.inj.get(AppComponent);
console.log(parentComponent);
}
}

使用
@Input
和一个小技巧将家长的
这个
发送给孩子。我想你也可以用另一种方式,通过
@Output

父组件
从'@angular/core'导入{Component};
@组成部分({
选择器:'应用程序根',
模板:“”,
样式:“”
})
导出类AppComponent{
title='appworks!';
var1=“val1”;
var2=这个;
}
子组件
从'@angular/core'导入{Component,Input,EventEmitter,OnInit};
@组成部分({
选择器:“应用程序子项”,
模板:“{parnt.var1}}”,
样式:“”
})
导出类ChildComponent实现OnInit{
@输入()参数;
}

您应该会看到打印的“val1”,即在子模板中打印的父级var1的值。

感谢@yurzui为我指引了正确的方向。。。最后我找到了两种不同的方法。。。不幸的是,所有这些都涉及到访问不太理想的私人成员。。。如果有人知道更好的方法,请大声说出来。。。多谢各位

 constructor(private vcRef: ViewContainerRef){
    var parentComponent1 = this.vcRef.injector._view.context;
    console.log(parentComponent1);
    var parentComponent2 = this.vcRef._element.parentView.context;
    console.log(parentComponent2);
    console.log(parentComponent1 === parentComponent2);
  }

下面是如何让它工作

@Component({
    selector: 'child'
})
class ChildComponent{
    constructor( @Optional() public myParent: ParentComponent ){}
}

你可以在

中找到更多信息,我有以下几个问题:1)假设如果可能,你想做什么?2) 问这个问题时,您使用的是哪个版本的angular2?@micronyks谢谢。。。简而言之,我需要创建动态组件/模板,并将其数据绑定上下文设置为父组件。。。有关更多详细信息,请参阅原始发行申请。。。谢谢你@micronyks。。。但是您的解决方案要求ChildComponent知道AppComponent的类型。。。正如我提到的,在我的例子中,ChildComponent将不知道类型。。。无论如何,谢谢你……谢谢@micronyks。唯一的问题是,如果父组件不存在,它将破坏应用程序。感谢您的回复。。。它可以工作,但问题是它需要修改父级及其模板。。。不过,谢谢你……这不是“一般性的”:你把
ParentComponent
写成了DI的类型——但是你的链接对这个问题还有其他一些很好的答案。