将输入数据传递到延迟加载的Angular模块中

时间:2019-03-18 18:23:03

标签: angular routing lazy-loading angular-routing ng-modules

我有一个名为NewsComponent的组件,该组件在我的应用程序内共享。我想将其扩展为NewsModule并添加一个路由系统以显示单个文章,以便我的路由看起来像

/some-component
/some-component/news
/some-component/news/article/12345
/other-component
/other-component/news
/other-component/news/article/23456

为了使其路线相对,我正在延迟加载模块:

const routes: Route = [
  {
    path: 'some-component',
    component: SomeComponent
  },
  {
    path: 'some-component/news',
    component: SomeNewsWrapperComponent,
    children: [
      {
        path: '',
        loadChildren: './news/module#NewsModule'
      }
    ]
  }
  // same for /other-component
]

问题是NewsComponent根据某些输入数据显示了视觉效果,而我过去常常通过@Input传递视觉效果。但是,由于该组件已封装在其延迟加载的模块中,因此不再可能。

我可以在导入了NewsServiceNewsModule的第三个模块中创建一个AppModule,并以这种方式传递数据,但是我认为这违反了模块化,因此我想避免它。对于单向数据流入模块是否有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

我认为除了这两种方法之外,没有办法传递数据(如果您是延迟加载的话)。

  1. 查询参数的使用
  2. 具有共享服务

根据我的理解,模块化就是设计的全部。如果您有大量数据要传递到延迟加载模块,那么绝对应该在错误的地方损坏了模块。延迟加载时,应该传递最少的信息,以使这些信息可以通过某些查询参数传递。

如果您具有共享服务,是的,它是解决上述问题的解决方案,但是,是的,它也违反了模块化,但这是设计问题。在最适当的级别使用延迟加载可使设计完美,并且在模块化方面不会出现任何问题。