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

0

Я должен сделать два типа url: /:culture и /:author, где оба имеют параметры url первого уровня. В то время как в культуре заданы предопределенные параметры, такие как en, es, en-us, br, fr, it и т.д., Автором может быть любое имя пользователя из db (кроме названий культур). Поэтому я хочу сделать маршрутизацию, которая могла бы отправить пользователя в HomeCtrl когда параметр находится в наборе культур, и если бы он не отправил его в AuthorCtrl. Что я мог сделать?

.when('/:culture/', {
    templateUrl:'partials/home/home',
    controller:'vvHomeCtrl'
});
Теги:
ngroute
angularjs-ng-route
url-routing

2 ответа

1
Лучший ответ

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

.when('/:cultureOrAuthor/', {
    templateUrl: function(params) {
        // AVAILABLE_CULTURES is your predefined array
        if(AVAILABLE_CULTURES.indexOf(params['cultureOrAuthor'])!==-1) {
            return 'urlForCultures';
        } else {
            return 'urlForAuthors';
        }
    },
    controller: function($scope, $routeParams) {
        if(AVAILABLE_CULTURES.indexOf($routeParams['cultureOrAuthor'])!==-1) {
            // first logic
        } else {
            // second logic
        }
    }
});

Это хорошее решение для простых контроллеров. В противном случае подумайте об использовании разрешения от маршрутизатора (docs).

  • 0
    Спасибо, это работает для меня.
1

Я согласен с решением @Mates, проверяя, действителен ли параметр культуры. Тем не менее, я бы, вероятно, попытался использовать свойство redirectTo для разделения двух маршрутов.

.when('/:culture/', {
    templateUrl:'partials/home/home',
    controller:'vvHomeCtrl',
    redirectTo:function(routeParams, path, search) {
        if(cultures.indexOf(routeParams.culture)!==-1) {
            //return path(string) to author route
        }
        return path;
    }
})
.when(/* Author route definition */);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню