Angular $ routeProvider覆盖后备路由

时间:2014-07-16 17:14:49

标签: javascript angularjs route-provider

我正在创建我的第一个相当大的角度项目,因此我选择将我的角度应用程序代码分解为这样的目录:

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中定义路由以便它们可以覆盖?

1 个答案:

答案 0 :(得分:0)

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