AuthGuard中的observable总是假的是因为在AuthGuard中使用的observable是一个Subject对象,而不是一个真正的可观察对象。Subject是一个特殊的可观察对象,它既可以作为一个可观察对象被订阅,也可以作为一个观察者发送值。
在AuthGuard中,当用户尝试访问需要身份验证的路由时,AuthGuard会检查用户的身份验证状态。如果用户已经通过身份验证,则AuthGuard会通过Subject对象发送一个true值,表示用户已经通过验证。如果用户尚未通过身份验证,则AuthGuard会通过Subject对象发送一个false值,表示用户未通过验证。
然而,由于Subject对象是一个多播对象,它会在每次订阅时重新发送最新的值。这意味着如果在AuthGuard中的observable被多个订阅者订阅,每个订阅者都会收到最新的值,而不是之前发送的值。因此,当AuthGuard中的observable被订阅时,它总是会发送最新的值,即false,即使之前已经发送过true值。
为了解决这个问题,可以使用BehaviorSubject代替Subject。BehaviorSubject也是一个特殊的可观察对象,它会在每次订阅时发送最新的值,并且在没有新值时会发送最后一个值。这样,当AuthGuard中的observable被多个订阅者订阅时,每个订阅者都会收到之前发送的值,而不是最新的值。这样就可以确保AuthGuard中的observable在多个订阅者之间保持一致。
推荐的腾讯云相关产品和产品介绍链接地址:
云+社区沙龙online第5期[架构演进]
高校公开课
腾讯技术创作特训营第二季
云原生正发声
云+社区技术沙龙[第7期]
企业创新在线学堂
“中小企业”在线学堂
企业创新在线学堂
腾讯技术创作特训营第二季第3期
技术创作101训练营
云+社区技术沙龙[第19期]
领取专属 10元无门槛券
手把手带您无忧上云