问题标签 [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 投票
1 回答
693 浏览

angular - 制作一个角度全局解析器以使数据在每条路线中都可用

我正在尝试制作一个全球解析器,它将提供每条路线......像这样的东西

this.activatedRoute.data=>

这就是我正在尝试的

以上结果仅适用于homeComponent.

0 投票
1 回答
427 浏览

angular - 如何根据解析的路由数据路由到子路由?

我正在加载一个带有来自解析器的数据的模块。加载的模块具有通常的空路径重定向到第一个子路由。但是我想根据解析的数据重定向到特定的路由。

在当前示例中,我有一个包含三个组件的子模块。根模块中的解析器提供组件应重定向到的数据。

应用模块:

子模块:

解析器返回应重定向到的步骤

如何根据提供的数据重定向到路由?我可以使用任何路由挂钩吗?

通过:

  • 空子路径上的 CanActivate -> 在提供后调用 CanActivate,因此:没有数据
  • 在空子路径中加载一个空组件并在 OnInit 触发重定向->对我来说有点臭
0 投票
0 回答
330 浏览

angular - Angular:如何始终重新加载 URL 但忽略片段?(使用 RunGuardsAndResolvers ?)

我“总是”想重新加载我的解析器,并且只在设置片段时忽略重新加载(例如:URL/xxx?yyy#FRAGMENTHERE)

我错过了什么还是在 Angular 中不可能?

这是我尝试过的:

在 app-routing-module.ts

在 XXX-routing-module.ts

测试1:

这个不起作用,因为当片段更改时,解析器被调用

测试 2,3,4:

那些不起作用,因为如果我试图在同一个 URL 上重新加载它不会调用解析器

PS:导航看起来像这样

0 投票
0 回答
624 浏览

angular - 在解析器中使用重定向时,Angular 2 解析器会导致无限循环

我有以下调用 api 服务的解析器。根据我回来的结果,我想将用户重定向到特定屏幕:

在我的 main.module.ts 我有

问题是解析器陷入无限循环。这里有什么问题?

0 投票
1 回答
185 浏览

angular - Invoke modal inside SwitchMap in angular2 resolver

I have a requirement of displaying modal popup based on warning message inside angular resolver. I am making a service call to API and using combineLatest and SwitchMap returning multiple responses. I need to display modal popup based on API service response result and redirect to different route if that modal pop up shown and clicked. Otherwise, resolver can return mutiple responses. I have tried below code and when debugging, my modal is not being hit and skipped and returns the responses. what changes to be done in below code so that when any warning message available, modal could be shown up and route to different page? I have searched other questions and could not see relevant like this.

Modal.Component.ts

0 投票
1 回答
1613 浏览

angular - 创建一个基于条件加载特定组件的 Routes 路径

我想为类似的结构化路径加载不同的组件。

意味着

example.com/whatever-post-slug --> 加载帖子组件
example.com/whatever-page-slug --> 加载页面组件
example.com/hello-i-am-a-string --> 加载帖子组件 (因为那个 slug 属于一个帖子)
example.com/about-us --> 加载页面组件(因为那个 slug 属于一个页面)

我为什么要这样做?

有人可能会想:嘿,但你为什么不只定义两个前缀不同的路径,那是什么路径呢?

答案是:我正在创建(顺便说一句,开源的)Angular WordPress 主题,我希望路由是用户决定的,而不是强制任何硬编码结构。

在多种可能性之一中,帖子和页面(如果您不了解 WordPress,只需知道这是两种不同的内容类型,我想使用独立的模块和组件)可能会在根级别共享 slug。

乍一看,我不知道 slug 是否属于帖子或页面或其他东西(所以UrlMatcher在这里无法提供帮助)。

我想到了解决办法吗?

是的,三个。

第一个解决方案

我可以创建一个包装器组件,它将为包罗万象的路线加载,然后,在这个组件内部执行以下操作:

并让 Wrapper 组件完成所有逻辑。

这会在游戏中添加一个额外的中间组件。

第二种解决方案

使用解析器作为包罗万象,然后在解析器中执行所有逻辑。

问题是,我需要订阅一个 http 通信来知道我正在处理什么样的内容类型,并且由于 Resolver resolve() 方法需要返回一个 Observable,所以在那里订阅并不好。

当然,如果我返回一个等待一段时间的占位符 observable,它就可以工作,如下所示:

...或者,如果我通过管道传输我的订阅mergeMap()并在我从订阅中获得结果时返回 EMPTY。

一旦我得到我的数据,我就可以设置新的路线,包括必须指向其特定组件的当前路径。

这对我来说似乎不是一个非常干净的方法。

第三个解决方案

只需加载一个普通的 Dispatcher 组件,该组件将执行所有检查,OnInit()然后导航到一个“秘密”组件特定的 url,但使用{ skipLocationChange: true },因此用户将拥有正确的路线,并且也会加载正确的组件。

但同样,这在游戏中增加了一个额外的中间组件。

我认为这是最干净的解决方案,因为在 App Routing 模块中我可以执行以下操作:

因此,只有当用户实际访问这两种内容类型之一时,我才会延迟加载这些模块。

此外,如果用户随后访问相同类型的第二个内容,则该内容类型组件将已经可用。

而我可以使用的事实{ skipLocationChange: true }将使路径保持预期成为可能。

另外,这允许显示导航加载反馈,而无需订阅路由器事件。

问题

你会做什么,为什么?

也许我错过了一些神奇的 Angular 功能,它允许以直截了当的方式做到这一点。

0 投票
1 回答
210 浏览

angular - Angular实现遗传解析器

一段时间以来一直在尝试在我的应用程序中实现基因解析器。基于我的直觉,我的第一个实现给了我确切的结果,因为这个 SO 问题:如何提供在 Angular4 中使用泛型的服务?,这当然也给了我确切的错误。

我尝试使用例外答案(使用InjectionToken)解决它,但无法让它工作,也许我在使用InjectionToken我当前的代码方面不够熟练:

GenericResolverService

路由器模块

ItemMasterDataService

当前代码抛出错误:

错误:无法解析 GenericResolverService 的所有参数:(?, [object Object])。

我究竟做错了什么?

0 投票
1 回答
656 浏览

angular - 在哪里使用角度解析?在延迟加载模块的路由中还是在父模块的路由中?

假设我们正在从模块 A 延迟加载模块 B。例如:

我的问题是我应该在哪里使用组件/模块 B 的解析。在 A 或 B 的路线内?哪个是正确/更好的方法?

0 投票
1 回答
546 浏览

javascript - 定义解析器并注入 ngrx 存储后,路由器停止工作

我正在使用路由器解析器,以便在加载页面之前获取我的 ngrx 存储数据。将解析器插入我的路由后,路由器没有生成我在其中的内容

其他路由(没有解析器)运行良好,如果我从路由中删除解析器,页面加载就好了。

我的解析器文件:

路线:

订阅 HomeComponent 中的路由数据:

(请注意,我已尝试删除此行以检查问题是否在这里并且仍然存在)

仅当我从 app-routing.module.ts 中的路由中删除解析器时,问题才会解决

0 投票
1 回答
341 浏览

angular - 解析器与 Redux

我已经在使用 Angular 的中小型项目中工作了很长时间,只要有一些数据需要从服务器加载,团队就会直接将其存储到 Redux 存储中。这允许在用户在“页面”之间导航以及他们决定刷新页面时保留数据。

但是,最近我一直在做一个“适当的”Angular 教程,我们设法通过结合服务(在 中提供app.module.ts)来保留数据和解析器来实现相同的结果。解析器确保在加载我的主页时,将所需的数据加载到服务中。此外,如果数据不是太大,我什至可以将其存储到 中localStorage,因此,HTTP如果数据不存在,则消除解析器中的请求。

除了不太可能的用例 1. 需要加载大量数据和 2. 用户出于某种原因经常刷新网页,我真的不明白为什么我们应该实现一个完整的 redux 存储。

是否有更多使用我不理解的 Redux 的理由,或者使用这种方法有更多的缺点?