gpt4 book ai didi

angular - canActivate 在订阅更改时不响应 Angular 2 路由器 AngularFire2

转载 作者:行者123 更新时间:2023-12-02 15:16:57 25 4
gpt4 key购买 nike

我正在使用 AngularFire2。这就是我使用 AuthGuard 服务的方式:

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
this.af.auth.subscribe((auth) => {
if(auth == null) {
this.router.navigate(['/login']);
this.allowed = false;
} else {
this.allowed = true;
}
})
return this.allowed;
}

上面的代码有效,除非我直接访问一个 protected 页面(我在浏览器中输入 URL),它不会在订阅解析为 true 后加载相应的组件。

在 Angular 1 中,保护路由是为了确保在路由加载之前首先解决某些问题。

它出现在 Angular 2 中,路由加载(无论是真还是假,并且不等待线路的任何响应),因此当订阅值返回为真时,我必须转到另一条路由,然后在它起作用之前回来。

保护我的路线以在 Angular 2 中响应的正确方法是什么?

最佳答案

在您的代码中 return this.allowed;在传递给 this.af.auth.subscribe(...) 的回调函数之前执行被执行。

应该是这样的

  import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
import { Observable } from 'rxjs/Observable';


canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.af.auth.map((auth) => {
if(auth == null) {
this.router.navigate(['/login']);
return false;
} else {
return true;
}
}).first()
}

关于angular - canActivate 在订阅更改时不响应 Angular 2 路由器 AngularFire2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com