我正在尝试进行404 authguard检查。如果数据库中不存在id,您将被重定向到404路由。
但由于某种原因,快照中的条件从未加载,并且authguard会自动将您重定向到主路径。
以下是代码:
canActivate(route:ActivatedRouteSnapshot){
this.route.params.map(key=>{
return this.af.database.object('heroes/'+key).first().subscribe(snap => {
if(snap){
console.log(true);
return true;
}
console.log(false);
return false;
});
});
}
答案 0 :(得分:0)
您不能将map()
与params
一起使用,params
不是数组,也不是Observable,而是对象。您可以将map()
与ActivatedRoute
一起使用,因为它返回一个Observable,但快照将返回固定值,而不是流。另请注意,您使用的是this.route
而不是route
。如果它没有抛出错误,可能你在守卫中有另一个route
。
您可以使用ParamMap
获得所需内容。如果您知道密钥,则可以使用route.paramMap.get('yourkey')
获取密钥。如果要迭代请求中的所有参数,可以使用以下命令将它们作为数组:
route.paramMap.keys.map(key => { ... });
答案 1 :(得分:0)
找到解决方案,我使用this.route(有2条路线)而不是只是访问参数来获取密钥。 另外我使用的是subscribe而不是map(虽然在这种情况下我并不真正理解map和subscribe之间的区别)但是由于某些原因,使用subscribe访问snap并返回true并没有工作。
canActivate(route:ActivatedRouteSnapshot){
return this.af.database.object('heroes/'+route.params.key).map(snap => {
if(snap.name){
return true;
}
this.router.navigate(['404']);
return false;
}).first();
}