【问题标题】:Angular $routeProvider override-able fallback routesAngular $routeProvider 可覆盖的后备路由
【发布时间】:2014-07-16 17:14:49
【问题描述】:

我正在创建我的第一个大型 Angular 项目,因此我选择将我的 Angular 应用程序代码分解为如下目录:

app/
    calendar/
        calendar.js
    contacts/
        contacts.js
    companies/
        companies.js    
    ...
    app.js

这些目录中的每一个都将包含一些用于视图 (.html)、指令、服务等的文件。

在我的app.js 文件中,我想设置可能有 80% 的时间使用的默认路由,如下所示:

$routeProvider
    .when('/:page', {
        templateUrl: function($routeParams) {
            return 'app/' + $routeParams.page + '/index.html';
        },
        controller: 'PageController'
    })

但是,我希望能够从我的模块中“覆盖”该路由,以便我可以执行诸如换出控制器、执行依赖注入等操作。我希望模块本身包含的那种逻辑来保持......嗯......模块化,所以我宁愿不在app.js 中定义每个模块的路由逻辑。例如,在我的app/calendar/calendar.js 文件中我想说:

$routeProvider
    .when('/calendar', {
        templateUrl: 'app/calendar/index.html',
        controller: 'CalendarIndexController', 
        resolve: { ... }
    })

问题是app.js 中的定义首先与位置匹配,因此从不使用此日历路线。

为了实现这一点,现在我只是在我的所有模块 javascript 文件之后包含一个额外的文件,它最后设置了我的后备路由,但这似乎有点笨拙。无论如何要在app.js 中定义路由,以便它们可以覆盖?

【问题讨论】:

  • 可能需要考虑使用ui-router
  • @Divey 你有想过这个吗?
  • @ChrisMoutray 在定义了所有其他路由之后,我只是通过最后定义我的后备路由来处理它。最终我硬着头皮将整个应用程序切换为使用 ui-router。一开始有点痛苦,但从长远来看是值得的。

标签: javascript angularjs route-provider


【解决方案1】:

您也许可以将此技术用于动态加载由 Dan Wahlin 在此处 http://weblogs.asp.net/dwahlin/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs 描述的控制器,并结合参数控制要加载哪个视图的默认路由。您可以将相同的页面参数传递给 resolve 函数来控制提供哪个视图和控制器的组合?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2023-03-26
    • 1970-01-01
    • 2014-05-28
    • 2018-11-30
    相关资源
    最近更新 更多