Javascript AngularJS RouteProvider为所有路由/路径/URL提供单一条件

Javascript AngularJS RouteProvider为所有路由/路径/URL提供单一条件,javascript,angularjs,route-provider,Javascript,Angularjs,Route Provider,我使用$routeProvider在用户单击链接时更改页面telmplate和控制器 像这样: $routeProvider.when('/profile/', { templateUrl: '/app/views/profile.html', controller: 'ProfileCtrl' }).when('/timeline/', { templateUrl: '/app/views/timeline.html',

我使用$routeProvider在用户单击链接时更改页面telmplate和控制器

像这样:

$routeProvider.when('/profile/', {
        templateUrl: '/app/views/profile.html',     
        controller: 'ProfileCtrl'
    }).when('/timeline/', {
        templateUrl: '/app/views/timeline.html',        
        controller: 'TimelineCtrl'
    }).when('/chat/:username', {
        templateUrl: function(param){
          if(param){
            return '/app/views/chat.html?' + param; 
          }
           return '/';
        },      
        controller: 'ChatCtrl'
    }).otherwise({ redirectTo: '/' });
$routeProvider.when(url, {
    templateUrl: '/app/views/' + url + '.html',     
       controller: url + 'Ctrl'
});
问题是我的应用上有太多的页面,我需要在上面注册每个url。当条件重复时,而模板url和控制器名称是基于链接路径加载的

我的问题是:我能把所有的when条件概括成一个when语句吗

像这样:

$routeProvider.when('/profile/', {
        templateUrl: '/app/views/profile.html',     
        controller: 'ProfileCtrl'
    }).when('/timeline/', {
        templateUrl: '/app/views/timeline.html',        
        controller: 'TimelineCtrl'
    }).when('/chat/:username', {
        templateUrl: function(param){
          if(param){
            return '/app/views/chat.html?' + param; 
          }
           return '/';
        },      
        controller: 'ChatCtrl'
    }).otherwise({ redirectTo: '/' });
$routeProvider.when(url, {
    templateUrl: '/app/views/' + url + '.html',     
       controller: url + 'Ctrl'
});

提前感谢:

您可以尝试以下内容:

angular.module('myapp', ['myapp.filters', 'myapp.services', 'myapp.directives']).
    config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/page/:name', {
        templateUrl: function(urlattr){
            return '/pages/' + urlattr.name + '.html';
        },
        controller: urlattr.name+'Ctrl.js'
      });
     }
]);

请试一试。在这种情况下,我假设您的html页面名称与控制器名称相同,并以“Ctrl”作为后缀。

您是否尝试从循环内的url列表生成路由?否,我希望有一个常规路由条件,以按给定路径加载templateurl和控制器名称。非常感谢:顺便说一句,在您的示例中,控制器是从.js文件加载的。能做到吗?因为一直以来,我都必须将我的所有控制器放在一个.js文件中。很抱歉,这是OOT,我是AngularYes的noob,您可以将所有控制器放在单个js文件中,也可以将每个控制器作为单独的js文件,具体取决于项目的体系结构。如果每个控制器都在单独的js中,请确保使用应用程序名称注册它,并将其包含在index.html中