angular - Angular 2 路由问题 : feature module doesn't load in the right place

标签 angular routing

在我的 Angular 2 应用程序中,我试图重现这个导航结构:

enter image description here

我的根应用程序组件中有一个大路由器导出,我在其中加载我的营销网站,或者在用户登录时加载我的应用程序。 因此,一旦用户登录,MyComponent(栗色)就会加载到红色路由器 socket 中,并且它有一个导航栏(MyHeader,黑色和灰色),并且它的自己的路由器 socket (蓝色)。当我单击导航栏中的主页时,它会将仪表板组件加载到蓝色路由器 socket 中,一切看起来都很好。但是,当我单击 Benefits 链接时,我希望它将 BenefitsModule 中的 BenefitsComponent(橙色和黄色)加载到蓝色路由器 socket 中。但相反,它似乎将它加载到红色路由器导出,即来自 AppComponent 的路由器导出,因为来自 MyComponent 的导航栏消失了。

我创建了一个 simplified version of my project on Github .

显然我缺少了一些东西。谁能帮我弄清楚发生了什么?

编辑:只是为了添加一点上下文,我正在尝试通过延迟加载福利模块来修改我的路由结构。最初我延迟加载了每个模块,但它在这里并不是很有用,因为 yield 部分应该与我的应用程序的登录部分一起加载。最初,我有这个延迟加载:

  • my.module.ts 中我没有提到 BenefitsModule 因为它是延迟加载的
  • my-routing.module.ts中我有一个额外的行来加载模块:

    { 路径:'benefits',loadChildren:'app/my/benefits/benefits.module#BenefitsModule',canActivateChild:[AuthGuard]}

  • benefits-routing.module.ts 中我没有提到 benefits 路径,因为它存在于 my-routing.module 中.ts

这非常有效。正如您在 the lazy-loading branch of my repository 中看到的那样.所以我想我的问题是如何在不丢失导航结构的情况下从这种延迟加载情况转变为急切加载情况。

编辑 2:在每个路由器 socket 上使用 activate 事件,我只是确认在使用延迟加载时,我的好处组件已加载到 MyComponent 中的路由器 socket 但没有延迟加载,它是加载到根 AppComponent 路由器导出。

最佳答案

所以我调查了你的问题。问题是您希望将 BenefitsComponent 加载到 MyComponent 中。但是,如果它不是 MyComponent 的子组件,他怎么能这样做呢?因此,为了解决这个问题,您需要像延迟加载时一样将其添加到子列表中。唯一的问题是,你不想在这里延迟加载。但是自从路由器的 RC6(以及因此发布)以来,您可以只传递一个返回模块的函数。这使得切换到延迟加载也非常简单,只需删除导入并使用字符串文字指向模块。

我向您的 GitHub 存储库添加了一个 PR 以向您展示它是如何工作的。 https://github.com/sarbogast/ng2-routing-example/pull/1

关于angular - Angular 2 路由问题 : feature module doesn't load in the right place,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846622/

相关文章:

javascript - 如何在没有querySelector的情况下在Angular中获取动态生成的元素?

angular - Typescript 变量在内部函数内未定义

Angular2 条件 ng-template 与条件 div

typescript - Angular 2 : How to pass route parameters to subroute?

angular - 取消选中所有选中的复选框 Angular2

ruby-on-rails - 一个 Controller 用于多条路线

node.js - 如何延迟铁路由器路由查找

ruby-on-rails - 是否可以在 Rails 中更改 URL 中的 Controller 名称

php - 在 laravel 中修改返回路由

javascript - Angular/CLI : How to change the port for auto reload?