【问题标题】:How can I use ComponentRef to destroy my Component from within?如何使用 ComponentRef 从内部销毁我的组件?
【发布时间】:2018-01-27 05:01:40
【问题描述】:

我希望能够从内部销毁我的组件。 (不是来自父级,因为它是在多个区域中动态创建的)。

我从 angular 的 api 中得知他们有一个 ComponentRef 对象。我尝试将它包含在构造函数中,但它说它需要一个参数,我不确定要传递给它什么。

链接:https://angular.io/api/core/ComponentRef

如何在我的组件中使用 ComponentRef 来销毁它?

import { Component, ComponentRef, OnInit } '@angular/core';
export class MyComponent implements OnInit {
    constructor(private ref: ComponentRef) {}

    ngOnInit() {
        this.ref.destroy()
    }
}

【问题讨论】:

  • 您不应该自己销毁组件。 Angular 会为您做到这一点。一个例外是您自己创建的组件。目的是什么?
  • 我有一个非常精细的项目,它为动画目的创建了这个组件。该组件已经尝试将自己从路由中删除,尽管我担心在某些情况下可能会在没有路由指令的情况下创建它。在这种情况下,我希望让组件自行销毁..
  • 如果你自己创建它,你可以自己销毁它。这也是<router-outlet> 所做的。示例见stackoverflow.com/questions/36325212/…(或查看RouterOutlet 组件源)
  • 是的,你可以阅读这篇文章Here is what you need to know about dynamic components in Angular了解componentRef在哪里使用
  • 销毁触发器应该来自父级还是来自组件本身?

标签: angular


【解决方案1】:

我能想到的是,假设您在父级中有 destroy 方法,并使用事件发射器在这个子级中调用该方法。

【讨论】:

    【解决方案2】:

    当您从另一个(父)组件实例化组件时,这很有用。

    您可以尝试从组件对象this.ngOnDestroy() 调用 ngOnDestroy()。

    如果您正在使用的 Angular 版本不允许,并且由于您想从同一个组件中销毁它,您需要要求父级使用输出和/或发射器来执行此操作。

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2020-09-19
      • 2017-11-30
      • 2019-03-16
      • 2018-07-05
      • 1970-01-01
      • 2019-07-28
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多