2017-09-02 40 views
5

说我有以下标记:如何从指令中访问主机组件?

<my-comp myDirective></my-comp> 

有什么办法,我可以从指示访问组件实例

更具体地说我希望能够从MyDirective访问MyComponent的属性和方法,最好没有上述添加任何的HTML。

回答

5

你只需把它注射

class MyDirective { 
    constructor(private host:MyComponent) {} 

一个严重的限制是,你需要知道组件的提前类型。

另请参见https://github.com/angular/angular/issues/8277
它还提供了一些解决方法,以便您在事先不知道该类型时。

+0

谢谢,Günter,它的工作原理。理想情况下,我需要一个适用于任何组件的通用解决方案。实际上,您可能会对我在此尝试执行的操作提出建议:https://stackoverflow.com/questions/46014977 – AngularChef

+0

许多人都需要一个通用的解决方案(正如您可以在链接问题中看到的那样),但目前这不是一个简单的解决方案。 –

+0

@GünterZöchbauer我认为我们可以使用一个界面,例如'构造函数(私有主机:HostedComponentInterface){}'并且要求指令的用户实现那个接口? – Ryan

0

您的指令可能是可应用于任何组件的通用指令。所以,在这种情况下,在构造函数中注入成分是不可能的,所以这是一个其他的方式做同样的

注入ViewContainerRef在构造

constructor(private _viewContainerRef: ViewContainerRef) { } 

,然后把它用

let hostComponent = this._viewContainerRef["_data"].componentView.component;