angular - 在新的angular2路由器中访问canDeactivate guard中的下一条路由信息

标签 angular router

如何在 angular2 新路由器中访问“canDeactivate”守卫中的下一条路线信息

最佳答案

我一直被困在完全相同的问题上。在我的例子中,我的 canDeactivate 逻辑将有条件地取消/重定向下一条路线。在这一点上,希望有更好的方法,我正在使用以下解决方案

  1. 在我的组件中,连接到 Router 事件(特别是 RoutesRecognized)以记录路线供以后使用。
  2. 执行 canDeactivate 并使用保存的路由数据返回 true 或 false。

ngOnInit(): void {
	this.tabbedSearch = this.profilesService.currentProfile.tabbedSearch;

	this.router.events
		.filter(e => e instanceof RoutesRecognized)
		.map(e => <RoutesRecognized> e)
		.subscribe((e) => {
			this.lastRoute = e.state.root.firstChild.routeConfig.path;
			this.lastParams = e.state.root.firstChild.params;
		});
}

public canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
	// do not navigate away if we are doing tabbed search AND the new route is the article details view
	if (this.tabbedSearch && this.lastRoute == "article/details/:type/:id/:version") {
		this.tabbedDetails.push(Object.create(this.lastParams));

		return false;
	}
	else {
		return true;
	}
}

(注意:您无法运行代码段,但出于某种原因,代码示例格式无法正确呈现。)

我真的,真的不喜欢这个,但还没有找到任何其他方法。

关于angular - 在新的angular2路由器中访问canDeactivate guard中的下一条路由信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465667/

相关文章:

networking - 为什么到我的网络上的设备的跟踪路由仅显示一个 IP 地址

javascript - 更改路由器后功能 setInterval 变得更快

Angular 5 HttpClient 发布原始二进制数据

javascript - Angular 2、TypeScript 和 ui-router - 如何获取状态参数

angular - 在 Angular2 中,如何使用注入(inject)服务中的值来设置静态变量?

angular - 在测验中处理多个单选按钮并且还面临找不到路径为 : 的控件

networking - 根据 ipaddress 唯一识别路由器后面的机器

PHP 路由解析器结束 URL

java - ServerSocket 在这些场景中究竟表现如何?

angular - Angular 中共享模块的理想大小