【问题标题】:angularjs route to controllers from different modulesangularjs 从不同模块路由到控制器
【发布时间】:2015-02-03 12:28:24
【问题描述】:

目前我们正在创建一个新的网络应用基础设施。

我们最初加载一个仪表板,它本质上是显示登录用户和菜单集的顶部栏。单击每个菜单将在主要部分加载一个屏幕(主要是杂物屏幕)。我们计划将每个 crud 屏幕及其组件(服务、控制器等)放在一个单独的模块中,该模块将彼此封装所有屏幕,例如,如果有 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,它在启动期间最初加载仪表板。

例如,如何将 AppModule 和路由与每个屏幕的每个模块(例如在本例中为 BookController 和 ChapterController)链接起来,记住我们需要在需要时使用 requirejs 动态加载模块。

(P.S :我们本质上是根据功能对我们的应用程序进行细分,其中我们系统中的功能通常等于屏幕)

此外,我们非常感谢您对我们可以最好地构建我们的应用程序的任何其他方式提出任何建议,包括对上述问题的回答。

问候, 米琳达

【问题讨论】:

  • 您可能会发现angular-require-lazy(或其一些概念)很有帮助。
  • 最佳实践是按 FEATURE 来构建您的 Angular 文件,这意味着您的 Dashboard 应用程序中的所有控制器、服务和其他必须位于一个位置。恕我直言,以您想要的方式构建文件是不好的

标签: javascript angularjs web-applications requirejs


【解决方案1】:

为什么在初始主模块中有路由配置?这会在您的模块之间产生不必要的耦合(即,您的初始模块必须知道每个模块的所有可能路径),从而违背了将代码移动到模块中的目的。

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

在配置 routeProvider 时,您可以使用路由的 resolve 属性使用延迟加载机制:此处引用的资源将在 routeChange 事件发生之前解析,这使您可以等待任何 promise 解析或一个文件的 requireJS 加载。 This blogpost 在这方面可能会有所帮助。

【讨论】:

    【解决方案2】:

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

    正在开发一个新的 AngularJS 路由器,它借鉴了其他更灵活的路由器(即 ui-router 等),这将完全允许动态加载您所说的模块,但据我所知在 AngularJS 1.4 之前将不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多