有没有办法防止角度破坏组件?

时间:2018-01-30 05:45:24

标签: angular typescript

我们知道有一个方法的ngOnDestroy()方法在销毁一个组件时运行,但我想知道有什么方法可以防止它被破坏吗?

1 个答案:

答案 0 :(得分:2)

CanDeactivate 后卫可以访问活动组件的实例,因此您可以实现 hasChanges(),检查是否有更改并有条件地要求离开前用户确认。 在以下示例中, CanDeactivateComponent 实现方法 hasChanges(),该方法返回一个布尔值,指示组件是否检测到任何更改。 CanDeactivate 保护的实现类似于 CanActivate 保护实现(您可以创建一个函数,或实现 CanDeactivate 接口的类):

path="*"

即使这是一个非常简单的实现, CanDeactivate 使用泛型,因此您需要指定要停用的组件类型。

在组件的Angular路由器中:

import { CanDeactivate } from '@angular/router';
import { CanDeactivateComponent } from './app/can-deactivate';

export class ConfirmDeactivateGuard implements CanDeactivate<CanDeactivateComponent> 
{
  canDeactivate(target: CanDeactivateComponent) 
  {
    if(target.hasChanges()){
      return window.confirm('Do you really want to cancel?');
    }
    return true;
  }
}

最后,与Angular上的所有其他服务一样,这个警卫需要相应注册:

{ 
  path: '',
  component: SomeComponent,
  canDeactivate: [ConfirmDeactivateGuard]
}

您可以拥有多个保护单个路由的保护,这有助于您实现复杂的用例,需要进行一系列不同的检查。