【问题标题】:angular2 set service property in route resolveangular2在路由解析中设置服务属性
【发布时间】:2017-07-24 03:10:24
【问题描述】:

所以我有一个相对较大的应用程序,其中包含延迟加载的功能模块,并且在这些模块中,有一系列处理特定数据结构的组件,例如:

/thing/123/profile /thing/123/subscriptions /thing/123/history

这些组件使用解析保护来确保 url 中引用的数据 id (123) 将适当的数据结构加载到管理 thing 服务中。解析保护优先使用此服务数据以避免在同级路由导航中重复查找数据,并且组件(profile,subscriptions,history)只需使用服务中的thing,对解析仍然一无所知守卫努力确保数据已加载。如果数据已加载到服务中,则 resolve 使用该数据,如果没有,则在路由解析期间查找。

听起来不错,对吧?在角度 2.0.X 左右的某个地方,解析保护在路由解析期间停止使用数据更新服务。

如果我在单个组件的OnInit 中使用ActivatedRoute.data.forEach(),我可以看到解析保护确实加载了数据,此时我可以将其重新映射回服务,但是我试图避免在每个子组件上重新实现路由数据检查,特别是因为在大多数情况下(同级导航)数据已经在服务上设置。解析保护是来自thing 服务的可观察对象,它设置了自己的数据成员。当 observable 运行时,在服务内,该值被适当地设置。它适当地解析为路线数据。然而,当路由加载时,这些数据已经从服务中消失了......

这只是加载完整网址时的问题,例如刷新最终路线,其中解析必须重新加载数据 - 如果它在导航到路线之前在服务中,那很好。

我可以稍后将 plunkr 与一个简单的示例放在一起,现在没有时间从实际应用程序中削减它,但只是想知道是否有人看到过这种行为或知道可能发生这种情况的原因(一些为解析路由而在基础应用程序中注入的服务的范围界定问题,但在路由加载后在功能模块中等),或者这是意外行为?

tl;dr - 为什么我的服务在路由解析期间正确地设置了一个属性,但是一旦路由实际加载,该属性就被取消了?这不是一个功能模块独有的,而是在我的整个应用程序中保持一致,破坏了我将路由参数解析抽象为服务的能力,使组件对查找一无所知。提前致谢!

【问题讨论】:

  • 可能与您提供服务的地点有关吗?在解析的路由数据首次设置到它之后,它是否可能在某处重新初始化?
  • @Fredrik - 这是一个好主意,我会跟踪服务构造函数,看看它是否在某个时候被重新创建,虽然我不明白为什么会这样 - 它只提供一次,通过它所服务的功能模块

标签: angular angular2-routing


【解决方案1】:

我想我看起来不够努力。路由器@^3.2.0 的已知问题,它两次实例化提供程序。解决办法是暂时降级路由器直到修复。

感谢@Fredrik Lundin 建议重新创建服务,该服务确实在路由解决后重新创建。

https://github.com/angular/angular/issues/12869

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多