角度中的路由解析器问题

问题描述 投票:0回答:1

我正在使用 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}

      },

    ]

  },

将用户重定向到付款成功页面直到他刷新页面,从而导致无限循环问题

angular routes angular16
1个回答
0
投票

更改此:

{
  path: '',
  component: JobListComponent,
  data: { title: 'Manage Job' }
}

对此:

{
  path: '',
  component: JobListComponent,
  data: { title: 'Manage Job' },
  pathMatch: 'full'

}
© www.soinside.com 2019 - 2024. All rights reserved.