问题标签 [angular-router-guards]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2260 浏览

angular - 在防护 angular5 中的 setTimeOut 函数中返回布尔值

我想用 canActive 方法创建一个路由保护并在几秒钟后响应。我用这个:

所以这个函数在 2 秒后返回一个 false。我希望能正常工作,但 angular 没有编译代码并返回以下错误:

它说 canActive 应该返回一个布尔值,而不是在 setTimeOut 中,但我的守卫是异步守卫,延迟响应是可以的。

0 投票
0 回答
1568 浏览

angular - 以编程方式导航时出现角度路由问题,旧组件保留在 DOM 中而不破坏

重复问题: 是的。这里是。

由于之前已经提出过上述问题,但由于问题没有正确说明问题,因此没有找到任何有用的答案。

场景/问题: 我正在使用 Angular4,我的项目基于延迟加载。我有一个登录页面,其中有一个名为“Register”的按钮,当我单击我的注册按钮时,它导航到注册模块并运行其组件。我面临的问题是当我单击注册按钮时,我的注册模块正确加载但我的登录模块没有从 DOM 中删除并且存在于同一页面上。

以下是我点击注册按钮之前的屏幕截图: 在此处输入图像描述

以下是我点击注册按钮后的屏幕截图: 在此处输入图像描述

下面是我的文件夹结构:

在此处输入图像描述

下面是我的 app-routing.module.ts:

下面是我的 login.component.ts:

下面是我的 login.component.html:

下面是我的 login.router.ts

下面是我的 app.component.html

下面是我的 app.component.ts

我希望我提供有关我的问题的简要信息。现在我想要的是当我点击注册按钮并导航到注册模块时,只有注册模块会打开并从 DOM 中删除所有以前的模块。

0 投票
6 回答
4446 浏览

javascript - 单击注销时如何在Angular中调用canDeactivate

在我当前的注销通话中,我有这样的事情:

问题是,当执行注销并调用重定向到登录时,会在该路由上调用 canDeactivate 守卫,但用户已经注销。

那么如何在执行注销之前调用 canDeactivate 守卫并在用户不想离开时取消注销操作。

谢谢。

0 投票
2 回答
906 浏览

angular - Angular 路由在前一个页面之上“打开”新页面,并在每个路由操作中保持堆叠

所以我有一个 angular4 应用程序使用import {RouterModule, Routes } from '@angular/router'

我的路线配置是这样设置的:

在我的导航栏 html 中使用

在我的页面之间路由。问题是,每次我点击导航栏中的链接时,都会出现新页面,但它在前一个页面的顶部,我的意思是如果我向下滚动我可以看到上一页(但导航栏是不重复)

不确定这是否相关,但我<router-outlet>在我的 app-component.html中使用

0 投票
3 回答
4699 浏览

angular - 升级到 Angular 5 后 canActivate 不起作用

我正在将我的项目升级到 Angular 5,但我无法理解如何激活不再起作用:

我的路由和模块文件:

和我在 myModule 中的路由文件:

问题是从未调用过 LoggedInGuard,我不明白我错过了什么

我添加了我的 loggedInGuard 函数,因为@Rowel de Guzman 评论

} }

0 投票
1 回答
1385 浏览

angular - CanActivateGuard 并将数据传递到 Guard

我有一个 Angular 4 应用程序,并且已经实现了一个保护来处理身份验证。我们有不同的模块,它们使用工厂来创建我们称之为 ThemeService 的东西。每个模块都是具有自己的样式和安全性的自包含应用程序。每个模块都告诉 ThemeService 用户必须拥有什么角色才能访问,并且守卫工作得很好。

这是守门员:

我现在有一个模块,它有一些需要使用不同角色保护的路由。我的问题是如何将必须为每个路由检查的角色传递给 AuthenticationGuard。我不想为我们想要检查的每个角色创建一个不同的后卫。

贝娄是我的路线配置的片段

0 投票
1 回答
1704 浏览

angular - CanActivate 带有服务调用的警卫

我有一个要求,我需要根据角色激活路由。请在下面找到代码:

我已经配置了我的路线,如下所示:

但是即使我的守卫恢复真实,我仍然无法路由到user路由。如果我在这里做错了什么,请告诉我。我已经探索了很多关于 SO 的帖子来处理警卫中的异步调用,但仍然没有成功

0 投票
1 回答
46 浏览

javascript - 为什么在受保护页面上刷新会将我重定向到 root,而不是我指定的重定向?

我正在使用 Angular 2 框架。我已经设置了我的应用程序路由模块,以便我立即被定向到登录页面(使用路径匹配'full'和redirectTo:'signOn'。我的应用程序路由模块中的所有其他路由都有canActivate: CanActivateViaAuthGuard。这只允许用户导航如果他们已登录,则转到其他链接。这可以正常工作,并且一旦登录,功能就可以了。用户甚至可以退出并返回主页。

但是,如果用户登录然后刷新页面,这在技术上将布尔值(允许他们导航)设置回 false 并尝试拉出根页面localhost:4020,它是空的。如果用户刷新页面,我需要它localhost:4020/signOn像最初那样路由。

有什么建议吗?

我的路径变量中的路由示例:

0 投票
1 回答
255 浏览

angular - Angular 4子路由始终包含来自父级的参数

我有一个 Angular 4 webapp,它目前托管一个多租户站点。

一个示例网址将类似于

我已按如下方式设置我的路线,以让自己成为“租户守卫”,确保在尝试渲染路线之前始终拥有此属性

我想要确保我的路由器链接始终包含租户。

目前,我的导航组件看起来像

但是,单击“受保护”实际上会将我发送到

如何在我的子组件上设置任何链接以包含父路由中的租户参数?

我考虑的一种方法是传递是ActivatedRoute从我的子组件周围传递服务并在组件内构造 url。

不过,这似乎有点低效,有没有另一种方法可以做到这一点而不在每个组件中都包含路由器?

0 投票
0 回答
549 浏览

angular - Angular - 我无法让 canDeactivate 与我的模式一起使用路线

设想:

技术:使用 typescript 和 webpack 的 Angular 版本 5 应用程序。

我做了一个canDeactivate 守卫来查看用户是否想离开当前路线。

当用户尝试导航到另一条路线时,需要出现我展示的自定义模式。

然后用户在模式中单击“是”(例如,我想离开)。

问题:

我的警卫服务很好,但模式方法“canDeactivate”没有受到打击。因此模态不会打开。

我已将自定义模式组件添加到 html。

我已经将警卫和模态添加到应用程序模块中。

这些是我下面的文件

停用GuardService:

我的自定义模式:

设置了 canDeactivate 的路由: