问题描述:在Angular中,当使用canDeactivate守卫时,发现值显示为null,并且canDeactivate方法不起作用。
解决方法:
import { CanDeactivate } from '@angular/router';
export class MyComponent implements CanDeactivate {
canDeactivate() {
// 守卫逻辑代码
}
}
// 路由配置
{
path: 'my-component',
component: MyComponent,
canDeactivate: [MyDeactivateGuard]
}
import { Injectable } from '@angular/core';
import { CanDeactivate } from '@angular/router';
import { Observable } from 'rxjs';
export interface CanComponentDeactivate {
canDeactivate: () => Observable | Promise | boolean;
}
@Injectable()
export class MyDeactivateGuard implements CanDeactivate {
canDeactivate(component: CanComponentDeactivate) {
return component.canDeactivate ? component.canDeactivate() : true;
}
}
import { Component } from '@angular/core';
import { Observable } from 'rxjs';
@Component({
selector: 'my-component',
template: '...'
})
export class MyComponent implements CanComponentDeactivate {
canDeactivate(): Observable | Promise | boolean {
// 守卫逻辑代码
}
}
import { NgModule } from '@angular/core';
import { MyDeactivateGuard } from './my-deactivate.guard';
@NgModule({
providers: [MyDeactivateGuard],
...
})
export class AppModule { }