Могут ли маршруты 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 ответов
Похоже, что Angular поддерживает это сейчас.
Из последних (v1.2.0) документов для $routeProvider.when(path, route)
:
path
может содержать необязательные именованные группы со знаком вопроса (:name?
)
Как упоминание @g-eorge, вы можете сделать это так:
module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);
Вы также можете сделать столько, сколько вам нужно дополнительных параметров.
Пожалуйста, смотрите ответ @jlareau здесь: https://stackru.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'
}
}
})