我们知道有一个方法的ngOnDestroy()方法在销毁一个组件时运行,但我想知道有什么方法可以防止它被破坏吗?
答案 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]
}
您可以拥有多个保护单个路由的保护,这有助于您实现复杂的用例,需要进行一系列不同的检查。