【发布时间】:2021-07-22 05:02:44
【问题描述】:
我需要取消承诺拒绝的路线并留在当前页面而不重定向到默认/错误页面, 我尝试了不同的方式来拒绝承诺,但最终解决了路由或重定向到默认路由。
@Injectable()
export class ModelResolver implements Resolve<MyModel> {
constructor(private router: Router) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {
let params: any = route.params;
let model: MyModel= new MyModel();
return model.init().then((obj: MyModel) => {
return obj;
}).catch((err: any) => {
Promise.reject({message: err , ngNavigationCancelingError: true});
});
}
}
reject({message: err , ngNavigationCancelingError: true}); // 重定向到我的默认路由
return Observable.throw({message: err , ngNavigationCancelingError: true}); // 重定向到当前路由而不取消
resolve(null); or return Observable.empty() // 重定向到当前路由而不取消
【问题讨论】:
-
我需要先解析数据,然后再决定是否导航。 stackoverflow.com/questions/42652708/…
-
好的,我假设你将有一个服务调用来获取 Rote Render 中的数据,你不能从 CanDeactivate 调用相同的服务吗?理想情况下,您应该拥有 CanDeactivate 中的服务调用可能需要的所有参数?
-
CanDeactivate 可以在离开路线时使用,以检查/通知任何未保存的数据。 CanActivate 在数据解析之前执行,我可以将此调用移至 CanActivate,但它不会像 issue 中提到的那样保留数据
标签: typescript redirect angular2-routing