问题标签 [angular2-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.
angular - Angular 2 Guards:canLoad() 是否有任何原因触发两次?
canLoad 在拒绝或接受时触发两次
canLoad 实现
调用的服务方法
假设 Observale 布尔响应将被返回
angular - Angular4 - 在警卫中使用组件服务
我有一个带有根组件和子组件的延迟加载模块。我还有一项服务可以在根组件和子组件以及兄弟姐妹之间共享数据。
背后的用例是一个向导,用户可以在其中分多个步骤设置一些数据。每个步骤的数据都全局存储在服务中,以便父组件和每个子组件都能够访问整个数据。
现在我想为单个步骤创建防护,它应该检查之前的步骤是否已完成(服务中的数据已设置),以防止用户在不执行之前的步骤的情况下通过 URL 访问进一步的步骤。
模块
路由
根组件
我现在的问题是,我在根组件中提供服务,因为我需要为每个组件(根和子组件)提供相同的服务实例。
但我需要在模块中提供警卫,否则我会得到“找不到 CanActivateBranch(警卫)的提供者”
如果我现在想将服务注入警卫,我会得到“没有...服务的提供者”,因为该服务只是在组件中提供,而不是在模块中提供。
有人知道如何解决这个问题吗?
提前非常感谢。
javascript - Angular 2+ 防护在页面刷新时有奇怪的行为
在 Angular 4 上使用 Asp Core 和来自 asp core 的默认模板。警卫工作,但在页面刷新时我得到了不需要的行为。canActivate
刷新受保护的路由时,它会在is时简要显示我的登录页面true
。下图显示了这种行为。注意刷新屏幕会闪烁红色(我的登录页面)。
重现问题的步骤:
- 创建项目
dotnet new angular
- 运行
dotnet restore
和npm install
- 添加文件
auth.guard.ts
(下面的代码) - 添加文件
auth.service.ts
(下面的代码) - 添加登录组件
app.modal.shared.ts
将服务和守卫添加到(下面的代码)中的路线- 在主页组件上添加登录按钮
- 运行程序并点击登录按钮
- 导航到柜台路线
- 按F5刷新,在显示计数器路由之前会出现登录页面(应该不会显示登录
canActivate
页面true
)
如果您希望查看任何其他代码或有任何疑问,请告诉我。在过去的两天里,我一直在用 Observables、地图和订阅尝试各种事情,但没有结果。任何帮助将不胜感激。提前致谢!
auth.guard.ts
auth.service.ts
app.module.shared.ts
编辑:添加了问题的 gif。
编辑:发现这是server-side prerendering的问题。我目前正在研究如何设置令牌存储服务并将其传递给服务器。
angular - canDeactivate in Angular2+ 在第二次后退时退两步
我已经CanDeactive
在最新版本的Angular2+中实现了 Guard ,
但是每当我点击浏览器的后退按钮时,第一次它让我留在同一页面上(没关系),但第二次它后退了两步。
这是我的代码:
家庭组件
和家庭卫士
我只想倒退一步。