169

我可以使用可选参数设置路由(相同的模板和控制器,但是如果某些参数不存在,则应该忽略它们?

所以不要写下面两条规则,只有一条?

module.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).            
     when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

像这样的东西([这个参数是可选的])

when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work

我在他们的文档中找不到任何东西。

4

4 回答 4

244

看起来 Angular 现在已经支持这个了。

来自最新的(v1.2.0)文档$routeProvider.when(path, route)

path可以包含带有问号 ( :name?)的可选命名组

于 2013-10-07T12:20:10.537 回答
60

就像@g-eorge 提到的那样,你可以这样:

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
  when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

您也可以根据需要制作可选参数。

于 2013-12-22T18:49:36.023 回答
8

请在此处查看@jlareau 答案:https ://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

您可以使用函数来生成模板字符串:

var app = angular.module('app',[]);

app.config(
    function($routeProvider) {
        $routeProvider.
            when('/', {templateUrl:'/home'}).
            when('/users/:user_id', 
                {   
                    controller:UserView, 
                    templateUrl: function(params){ return '/users/view/' + params.user_id;   }
                }
            ).
            otherwise({redirectTo:'/'});
    }
);
于 2014-02-07T14:07:19.940 回答
2

其实我认为 OZ_ 可能有些正确。

如果您有路线'/users/:userId'并导航到'/users/'(注意尾随的 /),则$routeParams在您的控制器中应该是包含userId: ""1.1.5 的对象。所以不,参数userId并没有完全被忽略,但我认为这是你能得到的最好的。

于 2013-07-07T21:23:47.260 回答