问题标签 [angular-resolver]
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 9 应用程序中刷新时服务未定义,路由中带有解析器
我有一个加载用户数据的组件,应该能够处理通过 url 直接访问。我的想法是在路由器中实现一个解析器服务,当通过应用程序的路由访问组件时,它已经可以正常工作了。但是如果我在 url 上刷新应用程序,解析器服务会抛出以下错误:
错误错误:“未捕获(承诺):TypeError:this.userService.getCurrentUser()未定义
刷新时似乎 userService 的初始化速度不够快。
这是解析器服务:
这是调用的 UserService 方法:
setCurrentUser() 方法 get 使用凭据调用后端以检索用户数据。
组件的构造函数,应该能够在刷新时加载其数据,包含以下内容:
编辑:
我将其更改为 Aakash Garg 的建议解决方案。现在 ngOnit() 方法只接收 undefined 并且解析器似乎不等待承诺。“我在这里吗?”旁边的控制台日志都没有。被执行。
javascript - Angular:HTML页面在从后端加载图像之前完成渲染
我正在编写一个显示一些产品的网站,每个产品都有一个图像。为此,我必须做两件事:1.)从后端加载产品。2.)从后端加载图像。
现在图像没有显示,因为在从后端加载图像时,HTML 视图已经被渲染/构建。那时图像还没有。当我有更多产品时,越往下的产品的图像就会正确显示。
我读到首选的解决方案是使用路由解析器在渲染组件之前预加载图像,所以我实现了 Product Resolver Service :
在我的组件中,我运行以下代码来获取刚刚预加载的图像:
在我的 app-routing.module.ts 中,我将其添加到路由中:
path: '', component: ProductsComponent, resolve: { map: ProductResolverService }
图像斑点的加载有点工作,斑点就在那里,但它们作为对象出现,而不是地图。console.log
您可以从以下命令中看到三个日志OnInit()
:
现在我的问题是如何从该对象访问 blob?如果我可以访问这些 blob,我可以将它们放在我的函数 createImageFromBlob(blob) 中,然后显示它们,这在以前有效。但我只是没有从物体中取出斑点。
而且,这已经非常复杂了,而且有点混乱。这一定是很多人都面临的问题,难道没有更好的加载图片的解决方案吗?
编辑:我使用 Java Spring Boot 作为后端,并将图像本地存储在每个产品的单独文件夹中。我与产品一起保存在我的 SQL 数据库中的每个图像的文件名。因此,在将图像加载到产品时,我首先需要从数据库中加载图像文件名,然后才能从本地存储中加载图像。
angular - 如何防止解析器调用相同的多个 http get 请求
我的应用程序有几个路由重定向,每个重定向都会触发FooResolverService
,并且每个解析调用都会调用http get 方法FooService
的GetFoos
方法(因此我的资源 api 被同一个请求多次请求)。
如何只允许第一次调用通过resolve
实际调用资源 api FooService
?
FooService
:
FoosAPIService
Routes
angular - Angular - 解析器和守卫
在我的应用程序中,我在登录后从 BE 解析用户。我想根据用户的角色导航到某些初始页面。我曾尝试使用可以激活防护来执行此操作,但由于在解析器之前计算防护,因此我的用户未定义并且应用程序被卡住。(重要的是,我正在使用 ngrx 来管理状态,因此我的用户被保存到状态)。有什么方法可以检查我的用户在 can activate 守卫中的角色并以某种方式等待 UserResolver ?
angular - 带有异步重定向的角度路由加载
在让我的路由中的页面加载之前,我需要等待一些 API 调用。基本上我们启用了 A/B 测试(这是 API 调用),并且基于此将必须加载与该路由关联的组件或重定向到不同的 url。为此,我试图使用返回的解析器Observable<boolean>
。这是代码:
然后我在路线中添加这个:
然后在 NewPageComponent 我在构造函数中添加订阅:
它有效,但是对于发生重定向的情况,我看到第一个 NewPageComponent 呈现,然后发生重定向。这是有道理的,因为我在组件初始化时订阅了我的 Observable,因此之后才开始重定向。
有没有办法在没有初始化组件的情况下制作重定向逻辑?
angular - 在组件中更新数据后使用解析器在子组件中加载数据
我有一个角度组件“update_profile”,它使用解析器服务加载数据。
我还使用选择器在另一个组件“complete_profile”中调用“update_profile”。当需要编辑时,我正在通过 ngIf 启动组件。
为了能够在“complete_profile”中加载数据,我还在父组件中注入了解析器。
update_profile 组件
解析器服务
在 complete_profile 中调用 update_profile
当我要去 update_profile 路线时,我的数据总是会更新..没关系。但是在 complete_profile 组件中,update_profile 是通过在 update_profile 选择器上应用 ngIf 指令来显示的,并且每当我单击按钮给出真实条件以在 complete_profile 组件中显示 update_profile 组件时,数据都不会更新。它显示了解析器在完成配置文件初始化时检索到的先前数据。
我了解解析器仅在路由更改时才解析数据。但是每当初始化 update_profile 组件时,我都需要解析更新的数据。
angular - angular - 每次重新加载页面时是否可以调用父解析器?
在解析器中:
- 获取数据
- 根据这些数据构建路由器
之后,我的路由器看起来是这样的:
所以我可以导航到/a/sub-a
例如。发生的事情是在重新加载时,不再调用解析器来生成路由。
是否可以再次调用它,或者我的情况是否有更好的模式?
编辑。
我做了一个stackblitz:
angular - 将对象传递给 Angular 9/10 解析器
我坚持将对象传递给 Angular 9/10 中的解析器。任何帮助将不胜感激。
我有一个页面SearchUser.component.ts
,我从中导航到另一个页面UserInfo.component.ts
。我试图在解析器中传递对象,它可以使用用户对象模型执行我的服务。
A) SearchUser.component.ts
B)resolve-user.guards.ts
(在第 2 步,我期待可以在 API 上发布的数据)。但它显示空值。
UserInfo.component.ts
应用程序路由.ts
感谢是否有人能指出我正确的方向,因为我肯定错过了一些东西。