Могут ли маршруты 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 156

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'
        }
    }
})