Могут ли маршруты 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
Я не смог найти ничего в их документации.
5 ответов:
похоже, что угловой имеет поддержку для этого.
из последних (v1.2.0) документов для
$routeProvider.when(path, route)
:
path
может содержать необязательные именованные группы с вопросительным знаком (:name?
)
Как @Джордж отметить, Вы можете сделать это так:
module.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl}) }]);
вы также можете сделать столько, сколько вам нужно дополнительных параметров.
пожалуйста, смотрите @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:'/'}); } );
на самом деле я думаю, что OZ_ может быть несколько правильных.
если у вас есть маршрут
'/users/:userId'
и выберите'/users/'
(обратите внимание на трейлинг /),$routeParams
в вашем контроллере должен быть объект, содержащийuserId: ""
в 1.1.5. Так что нет параматерuserId
не полностью проигнорирована, но я думаю, что это лучшее, что вы собираетесь получить.
@JamesBell вы можете использовать опцию сквош, как было отвечено в этом посте: состояние приложения с дополнительным параметром и без конечной косой черты
.state('path', { url: '/path/:param1', params: { param1: { value: null, squash: true } }, views: { 'map-tab': { templateUrl: 'templates/map.html', controller: 'testCtrl' } } })