问题标签 [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.

0 投票
2 回答
1242 浏览

angular - Angular 2+ - 数据加载:最佳实践

我想知道在 Angular 5 中加载数据的最佳方法是什么。当然,我们希望让组件保持沉默;)现在,我正在使用解析器,Angular 在特定路由中调用解析器。基本上,数据是在组件初始化之前加载的,因此我可以向用户显示加载器动画。

例如。

AResolver.resolver.ts

模块.ts

AComponent.component.ts

好吧,到目前为止一切都很好,但是:

  1. 如果我有具有依赖关系的解析器怎么办?那么,要解析 B,我们需要来自 A 的 id 吗?我应该使用解析器包装器吗?因此我做了类似的事情:

例子

我想这是最好的方法,因为我们仍然有 2 个可以重用的独立解析器。一般来说,为所有需要数据的组件或只为依赖于其他解析器的解析器制作解析器包装器是一种好习惯,还是根本不应该使用解析器包装器?

  1. 解析器中的其他方法(如resolveWithId)呢?

  2. AResolverroute.paramMap 中用于获取 id。传递 id 不是更好吗,因为这看起来是紧密耦合的?

  3. 有哪些替代方案?

  4. 我使用的方法有什么缺点?

0 投票
1 回答
29 浏览

angular - 我需要为每个页面创建不同的解析器吗?每个页面都有不同的 API 调用。角度 2+

  1. 我确实有多个页面,每个页面都有不同的 API 调用。那么我是否需要为每个页面创建不同的解析器?
    1. 我可以在不添加新服务的情况下实现对主要服务的解析吗?

我这样写了转售服务

在我的构造函数里面是

0 投票
2 回答
2053 浏览

angular - 如果添加了另一个数据流,解析器不会解析

我正在尝试使用解析器来根据路由保存的给定参数检索数据。

不幸的是,当我添加另一个数据流时,我的数据依赖于解析器从未真正解析过。

如果我直接返回一个立即解析的值,一切正常。我调试了情况,看到我收到了所有的部分信息,但它最终未能真正解决。

这是一个快速示例。如果需要更多代码来理解问题,请联系我。

我的服务:

SecondService(这个从后端检索数据):

解析器:

路由器:

零件:

SomeComponent.html

0 投票
1 回答
849 浏览

angular - Angular 4 - 为应用程序组件使用解析器

我刚刚发现了解析器类,发现它非常有用。

我需要预加载不同的对象,具体取决于特定的 url。

但是,在我的布局 ( app.component.ts+ app.component.html) 中,我想使用解析器来从 api 预加载记录的用户数据。

我知道这个组件不能通过路由器访问,所以目前我使用ngOnInit钩子。

有没有办法在应用组件渲染之前使用解析器预加载数据?

0 投票
2 回答
2593 浏览

angular - 角解析器不工作。路由从不订阅返回的 observable

我正在尝试将解析器添加到我的 Angular 应用程序的路由中。

以下是解析器。

以下是 中的getAll()方法itemService,解析器调用该方法来获取 observable。

以下是使用此解析器的路由定义。

当用户导航到该路线时,应用程序挂起并且导航未完成。可以看到,只有get all called在控制台登录,new subscription for items observable没有登录。所以,看起来路由没有订阅解析器返回的 observable。

这可能是什么原因?我该如何进一步解决这个问题?

编辑

如果我返回一个承诺而不是一个可观察的,它可以正常工作。

0 投票
1 回答
667 浏览

error-handling - Angular GlobalErrorHandler 和 HttpErrorResponse - 解析器抛出格式错误的 HttpErrorResponse

我在 Angular 6 应用程序中创建了全局错误处理程序:

主要错误处理方法:

问题:许多 HTTP 服务调用是在解析器中执行的:

如果在这样的调用中发生 Http 错误,我的全局错误处理程序收到的错误将形成为包裹在 Error 中的 HttpErrorResponse(错误消息是 HttpErrorResponse):

如果 Http 错误发生在解析器之外,则全局错误处理程序可以正常工作。

为了达到我的目标(从解析器抛出 HttpErrorResponse),我需要指定在订阅内的错误回调中处理错误的方式,但我不能这样做,因为解析器是管理订阅的人。

有没有办法指定解析器应该如何处理错误?

我想避免手动解析这些包装错误。

0 投票
4 回答
4436 浏览

javascript - 在组件初始化之前角加载异步数据

我在使用来自 API 调用的数据时遇到问题:我想使用检索到的数据来设置复选框中的选中状态,但是组件在 api 响应之前被初始化并且我得到了一些控制台错误:

错误类型错误:无法读取未定义的属性“id”

我也用解析器测试了行为,但我遇到了同样的问题,即使在初始化之前记录了响应数组:

组件.ts

组件.html

我制作了一个 stackblitz 演示来展示我使用的错误、api 服务、路由和解析器。在这里:https ://stackblitz.com/edit/async-angular-resolver

我怎么解决这个问题?

编辑:使用安全操作符不能解决错误 EDIT2:在表单标签中使用 *ngIf 不能解决错误

0 投票
2 回答
2181 浏览

angular - 如何在 Angular 中的路由之间推送数据

假设我item-list在 route 中获得了一个数组/items/。item-list.component.html 看起来像这样:

我想要做的是将item对象从item-list数组推送到下一页(或路由)/items/:item-id.

目前,我设置它的方式是使用 2 个解析器,每个路由一个:
1. GET items-list
2. GET item by id

我意识到这些路由之间存在不必要的 API 调用,因为我需要的项目对象已经在数组中。如果项目不存在(由于页面刷新或直接链接),我计划重构解析器调用 API

我将如何处理这个?

注意:在 Ionic3 中,可以这样做:navCtrl.push('ItemPage', {item: item});

0 投票
0 回答
585 浏览

angular - Ngrx 和 Angular 6 中带有 HttpClient 的解析器

我在 Angular 6 中使用 ngrx / (store, effects)。我在解析器解析其中一个路由变量时遇到了问题。这里是代码和解释

解析器

效果

减速器

服务

问题是,就像代码一样,resolves specialties 变量被解析为空([]),在组件中我将其设为空,一个空数组。但是,如果在服务中,我更改了 http 调用,对于被注释的行,解析器中变量的解析采用我返回的唯一正确值。

“解析器”在效果结束之前被解析,当它在服务中调用 http 的获取时。

我不明白的是,注释行(一切正常)返回一个与 http 调用内容相同的 observable。

有什么建议么?

0 投票
1 回答
1396 浏览

angular - 角度路由器解析器 - 重新加载时从父级获取参数

我有一条这样的路线,带有一个子路线的解析器。

解析器看起来像这样

在导航到路线之前,我使用该服务来设置所选组织。

到目前为止,它按预期工作,我可以使用它snapshot.data来获取选定的组织。

现在当我重新加载路线时

/组织/12345/个人资料

我希望解析器检查是否有activeOrganization存储。如果没有,它应该通过http.get带有12345as的 a 来检索它id

我的问题是我不知道用哪个工具可以检索参数。通常在一个组件中我可以简单地使用activatedRoute.parent.params 但在这种情况下注入activatedRoute.parent的是null.

我想,既然我已经在 root 中提供了解析器,那parent=null是有道理的,但是注销我null在父级中获得的快照以及firstChild......