我正在使用 Angular 16 开发一个项目,我是 Angular 的新手,我的项目中有两个模块,或者说两个面板,即资产所有者和服务提供商。资产所有者是免费用户,而服务提供商必须订阅才能看到完整功能。
所以特点是: 例如,资产所有者可以发布工作并通过邮件邀请服务提供商(订阅的服务提供商)提交提案并在工作进行时竞标该工作。 所以现在我陷入了一个困境。 如果服务提供商(订阅者)登录并执行其活动,然后关闭选项卡而不注销,那么如果他进入服务提供商配置文件,如果他的本地存储中有有效令牌,他将直接被重定向到仪表板。因此,在这种情况下,如果用户通过资产所有者发送的邮件链接查看工作详细信息,那么如果他是订阅者,那么他必须查看工作的详细信息,否则他将被重定向到仪表板,其中有升级订阅按钮有吗,现在我们来讨论这个问题。
因此,为了处理整个过程,我正在检查用户数据的订阅详细信息,这些数据以 userData$ 形式存储在服务中,并且在初始化时的查看作业组件中,我正在检查用户是否已订阅,然后他可以继续前进,否则他将被重定向到仪表板。但是,如果用户订阅了该选项卡,然后他关闭了该选项卡,然后单击了邮件中的链接,则他必须被发送到职位详细信息页面,该页面将从 profileService 中检查 userData$,并且该 profileService 会借助以下命令从服务器获取该数据:令牌详细信息现在确实需要一些时间,因此为了防止重定向(对于订阅用户),我正在使用路由解析器来检查 userData$ 是否非假,如果不是假,则只让路由去查看作业并其余代码有效。当用户是订阅者时,这在正常情况下工作正常,但如果用户是非订阅者并且他从面板购买了订阅,然后尝试查看任何作业,那么解析器会导致问题,它会一次又一次地将用户重定向到每当用户单击职位名称(职位列表 - 仅订阅用户可见)时,付款成功页面,并且仅在页面不刷新之前才会发生。
注意:一旦我们收到来自 stripe 的支付成功消息,profileService 中的 userData$ 就会被更新。
我应该如何管理流程,下面是我的解析器代码:
从'@angular/core'导入{注入};
从“@angular/router”导入{ActivatedRouteSnapshot,ResolveFn,RouterStateSnapshot};
从 'rxjs' 导入 { Observable, filter, take };
从'./profile-image.service'导入{ProfileImageService};
导出 const profileDataResolver: ResolveFn = (
路线:激活的路线快照,
状态:RouterStateSnapshot,
profileService:ProfileImageService = 注入(ProfileImageService)
): 可观察 => {
return new Observable<boolean>(observer => {
profileService.setImageUrl('serviceprovider');
profileService.userData$
.pipe(
filter(Boolean),
take(1)
)
.subscribe(user => {
observer.next(true);
observer.complete();
});
下面是路由部分:
path: 'managerfp',
canActivate: [AuthGuard, RoleGuard],
component: manageJobs,
children: [
{
path: '', component: JobListComponent, data: { title: 'Manage Job' }
},
{
path: 'view/:id', component: ViewJobs, data: { title: 'View RFP' },
resolve: { message: profileDataResolver}
},
]
},
将用户重定向到付款成功页面直到他刷新页面,从而导致无限循环问题
更改此:
{
path: '',
component: JobListComponent,
data: { title: 'Manage Job' }
}
对此:
{
path: '',
component: JobListComponent,
data: { title: 'Manage Job' },
pathMatch: 'full'
}