2017-09-02 50 views

cevap

5

Sadece enjekte edebilirsiniz

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

Şiddetli bir sınırlama, önceden bileşen türünü bilmeniz gerektiğidir.

Ayrıca bkz. https://github.com/angular/angular/issues/8277
Ayrıca, önceden türü bilmediğinizde bazı geçici çözümler de sağlar.

+0

Teşekkür ederim Günter, işe yarıyor. İdeal olarak, herhangi bir bileşen için çalışan genel bir çözüme ihtiyaç duyardım. Aslında burada yapmaya çalıştığım şey için bir öneriniz olabilir: https://stackoverflow.com/questions/46014977 – AngularChef

+0

Genel bir çözüm birçok kişi tarafından (bağlantılı sorundan da görebileceğiniz gibi) istenir, ancak şu anda orada bunun için kolay bir çözüm değil. –

+0

@ GünterZöchbauer Bir arabirimi kullanabileceğimizi varsayalım. Kurucu (özel ana bilgisayar: HostedComponentInterface) {} 've direktifin kullanıcısı bu arayüzü uygular mı? – Ryan

0

Yönergeniz, bileşenlerinden herhangi birine uygulanabilecek genel bir kitap olabilir. Yani, bu durumda, yapıcıya bileşen enjekte etmek mümkün olmazdı, Yani burada

constructor(private _viewContainerRef: ViewContainerRef) { } 

ViewContainerRefViewContainerRef xzxx xzxx xzxx

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