2017-08-03 9 views
1

私はプライベートcompRefとしてコンストラクタにそれを注入することによりComponentRefクラスを使用してコンポーネントを破壊しようとしている:ComponentRefComponentRef <C>

それはエラーを与えています。未知(約束):エラー:ComponentRefのプロバイダがありません!

コンポーネントレベルとapp.moduleのProvider配列にComponentRefを含めようとしましたが、タイプが「Providers」タイプに割り当てられません。

destroy()メソッドを使用できるようにComponentRefを実装する方法についてのヘルプはありますか?

ありがとうございます。

+0

説明については、[私の答え](https://stackoverflow.com/a/45474587/2545680)を参照し破壊方法のなぜあなたはコンポーネントを破壊したいのですか? –

+0

@maximus、ご協力いただきありがとうございます。そのコンポーネントに関連するすべてのプロパティとオブジェクトをクリアする必要があります。 destroy()メソッドはそれを行うためのすばやくクリーンな方法だと思いました。 – Venkat

+0

私は参照してください。 'destroy'は実際にあなたが思っていることをしていません。更新された回答 –

答えて

0

destroy()メソッドは、動的に作成されたコンポーネントで呼び出すことができます。ここでは簡単な例です:

export class SampleComponent implements AfterViewInit { 
    @ViewChild("vc", {read: ViewContainerRef}) vc: ViewContainerRef; 

    constructor(private resolver: ComponentFactoryResolver) {} 

    ngAfterViewInit() { 
     const componentFactory = this.resolver.resolveComponentFactory(BComponent) 
     const componentRef = this.vc.createComponent(componentFactory); 
     componentRef.destroy(); <------------------- 
    } 
} 

それは、動的に作成されなかった場合は、コンポーネントのcomponentRefにアクセスすることはできません。

I will need to clear all the properties and objects related to that component.

destroy方法は、実際にコンポーネントインスタンスのプロパティをクリアしません。単にビューコンテナからビューを切り離すかapplicationRef、投影されたビューを切り離してビューコンポーネントの状態を更新します。また、同じ一連の操作を実行する子コンポーネントと組み込みビューでもdestroyがトリガーされます。

詳細については、これらの記事を読む

関連する問題