我正在我CanDeactivate
的一个主要组件中实现功能。为了测试它,我让它总是返回false
,所以路线不能改变。
这是返回 PromiseCanDeactivate
的调用component.canDeactivate()
解析为 false 的实现:
@Injectable()
export class CanDeactivateNewRecord implements
CanDeactivate<NewRecordComponent> {
canDeactivate(
component: NewRecordComponent,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState: RouterStateSnapshot ):
Observable<boolean>|Promise<boolean>|boolean {
return component.canDeactivate();
}
}
这是定义模块路由的片段:
const recordsRoutes: Routes = [
{
path: 'nou',
component: NewRecordComponent,
canDeactivate: [CanDeactivateNewRecord]
},{
path: ':id',
component: RecordComponent
}
];
当我使用back
服务的方法Location
从@angular/common
导航到上一页时,有两种不同的情况:
- 如果之前的位置是由 Angular 路由器管理的,则导航会被阻止,并且应用程序会停留在该组件的路由上,
- 如果之前的位置在应用程序之外(例如,如果该组件的路由的 url 直接在浏览器导航栏中引入)它会在应用程序之外并加载上一个页面。
即使之前的位置是由路由器管理的,调用location.back()
足够多的次数(与应用程序的导航历史长度一样多)也会使导航返回到应用程序启动之前的页面。
这有什么问题?