0

情况: 我正忙于开发一个在线课程,用户必须按顺序浏览一系列页面,但我想让他们不要导航到其他页面。如果他们尝试这样做,则当前页面将再次加载。

我的想法:我创建了一个公共布尔数组来跟踪用户的进度(下面的示例):

progress: [boolean, boolean, boolean] = [true, false, false];

End of Page 1:
progress[0] = false;
progress[1] = true;
End of Page 2:
progress[1] = false;
progress[2] = true;

我的问题是:如何使用 auth 保护 canLoad 来禁止用户根据进度数组访问任何其他页面?

我有很多页面,很想使用一个 Auth Gaud 来执行检查,而不是为每个页面创建一个保护。

4

2 回答 2

0

很难给你确切的代码,但下面是我会怎么做的有点天真:

在所有页面都可用的共享提供程序中创建一个对象来跟踪进度:

public progress: {
     pageRoutePathName1: boolean,
     pageRoutePathName2: boolean,
}

基本上对象的属性应该等于你的路线的路径值

然后只需更新对象布尔值的状态,类似于您的想法。

将此类共享提供程序导入您的负载防护并利用对象进行 canLoad 方法:

canLoad(route: Route, segments: UrlSegment[]): Promise<boolean> | boolean {

    if (this.sharedProvider.progress[route.path] === true) {
        return true
    } else {
        return false
    }

}
于 2020-06-29T16:48:58.193 回答
0

我找到了一个符合我的问题的线程。 这个答案对我有用 - 它在按钮导航之前和之后切换一个布尔值(禁止导航我的手动 URL 输入)。

于 2020-06-29T19:14:11.487 回答