有什么方法可以防止破坏角度组件?

Has*_*aza 3 typescript angular

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

Mar*_*ero 8

CanDeactivate后卫先后获得活性成分的情况下,这样你就可以实现hasChanges()是检查,如果已经出现了变化,并有条件地请假前的用户确认。在以下示例中,CanDeactivateComponent实现了方法hasChanges (),该方法返回一个布尔值,指示组件是否检测到任何更改。CanDeactivate守卫的实现类似于CanActivate守卫 implelementaion(你可以创建一个函数,或者一个实现CanDeactivate接口的类):

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

在组件的 Angular 路由器中:

{ 
  path: '',
  component: SomeComponent,
  canDeactivate: [ConfirmDeactivateGuard]
}
Run Code Online (Sandbox Code Playgroud)

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

@NgModule({
  ...
  providers: [
    ...
    ConfirmDeactivateGuard
  ]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

您可以有多个守卫保护一条路线,这有助于您实现复杂的用例,其中需要一系列不同的检查。