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