说我有以下标记:如何从指令中访问主机组件?
<my-comp myDirective></my-comp>
有什么办法,我可以从指示访问组件实例?
更具体地说我希望能够从MyDirective
访问MyComponent
的属性和方法,最好没有上述添加任何的HTML。
说我有以下标记:如何从指令中访问主机组件?
<my-comp myDirective></my-comp>
有什么办法,我可以从指示访问组件实例?
更具体地说我希望能够从MyDirective
访问MyComponent
的属性和方法,最好没有上述添加任何的HTML。
你只需把它注射
class MyDirective {
constructor(private host:MyComponent) {}
一个严重的限制是,你需要知道组件的提前类型。
另请参见https://github.com/angular/angular/issues/8277
它还提供了一些解决方法,以便您在事先不知道该类型时。
您的指令可能是可应用于任何组件的通用指令。所以,在这种情况下,在构造函数中注入成分是不可能的,所以这是一个其他的方式做同样的
注入ViewContainerRef
在构造
constructor(private _viewContainerRef: ViewContainerRef) { }
,然后把它用
let hostComponent = this._viewContainerRef["_data"].componentView.component;
谢谢,Günter,它的工作原理。理想情况下,我需要一个适用于任何组件的通用解决方案。实际上,您可能会对我在此尝试执行的操作提出建议:https://stackoverflow.com/questions/46014977 – AngularChef
许多人都需要一个通用的解决方案(正如您可以在链接问题中看到的那样),但目前这不是一个简单的解决方案。 –
@GünterZöchbauer我认为我们可以使用一个界面,例如'构造函数(私有主机:HostedComponentInterface){}'并且要求指令的用户实现那个接口? – Ryan