Могут ли маршруты angularjs иметь дополнительные значения параметров?

Можно ли задать маршрут с необязательными параметрами (тем же шаблоном и контроллером, но некоторые параметры следует игнорировать, если они не существуют?

Итак, вместо того, чтобы писать следующие два правила, используйте только один?

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

Я не мог найти что-либо в своей документации.

Ответ 1

Похоже, Angular имеет поддержку для этого сейчас.

Из последних (v1.2.0) документов для $routeProvider.when(path, route):

path может содержать необязательные именованные группы с вопросительным знаком (:name?)

Ответ 2

Как и упоминание @g-eorge, вы можете сделать это следующим образом:

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

Вы также можете сделать так, как вам нужны дополнительные параметры.

Ответ 3

Пожалуйста, см. @jlareau ответ здесь: fooobar.com/questions/41013/...

Вы можете использовать функцию для генерации строки шаблона:

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:'/'});
    }
);

Ответ 4

На самом деле, я думаю, OZ_ может быть несколько правильным.

Если у вас есть маршрут '/users/:userId' и перейдите к '/users/' (обратите внимание на трейлинг /), $routeParams в вашем контроллере должен быть объект, содержащий userId: "" в 1.1.5. Таким образом, параметр paramater userId не полностью игнорируется, но я думаю, что это лучшее, что вы собираетесь получить.