繁体   English   中英

angularjs从不同的模块路由到控制器

[英]angularjs route to controllers from different modules

目前,我们正在创建一个新的Web应用程序基础结构。

首先,我们加载一个仪表板,该仪表板本质上是显示已登录用户和菜单集的顶部栏。 单击每个菜单会在主要部分加载一个屏幕(主要是粗略屏幕)。 我们计划将每个原始屏幕及其组件(服务,控制器等)放在一个单独的模块中,该模块将相互封装所有屏幕,例如,如果有78个屏幕,则每个屏幕将有78个单独的模块。 我们还计划使用Requirejs动态加载这些依赖项。

但是,出现了问题,我们需要将菜单与每个屏幕的每个模块链接起来。 通常,在基于单个模块的应用程序中,将这样做。

config(function($routeProvider, $locationProvider) {
  $routeProvider
   .when('/Book/load', {
    templateUrl: 'book.html',
    controller: 'BookController'
  })
  .when('/Screen/load', {
    templateUrl: 'chapter.html',
    controller: 'ChapterController'
  });

BookController和ChapterController将在SAME模块中的位置。

但是,在我们的示例中,BookController将位于用于书本屏幕的BookModule中,并且对于ChapterController也是如此。 路由将位于初始主模块(例如AppModule)中,该模块最初在启动期间加载仪表板。

例如,我们要怎么说呢?请牢记在使用requirejs进行NEEDED时,我们需要动态加载模块,从而将AppModule和路由与每个屏幕的每个模块链接起来(例如,在本例中为BookController和ChapterController)。

(PS:我们实质上是根据功能来划分应用程序,而系统中的功能通常等于屏幕)

同样,我们将以任何其他方式最好地构建应用程序的建议,包括对上述问题的解答。

问候,米林达

为什么在初始主模块中具有路由配置? 这在您的模块之间创建了不必要的耦合(即,您的初始模块必须知道每个模块的所有可能路径),从而破坏了首先将代码移入模块的目的。

每个模块都可以具有自己的路由配置,该配置将在加载模块时生效。 (一致的命名约定可以帮助避免在不相关模块的路由之间发生冲突)

在配置routeProvider时,可以使用路由的resolve属性来使用延迟加载机制:这里引用的资源将在routeChange事件发生之前得到解析,这使您可以等待任何承诺解析或文件的requireJS加载。 该博客文章可能会在这方面有所帮助。

到目前为止,据我所知,还没有一种机制可以在运行时动态加载模块,然后将其合并到AngularJS应用中。 您可以将应用细分为通过requirejs加载的78个单独的模块,但是您仍然需要一个具有所有其他78个依赖关系的单个主模块。 然后是您将配置所有路由的主要模块。

有一个新的AngularJS路由器正在进行工作,该路由器借鉴了其他更灵活的路由器(即ui-router等),这将完全允许您正在谈论的模块的动态加载,但据我所知在AngularJS 1.4之前可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM