如何设置角度管线参数的可接受值

How to set accepted values for angular route parameter?

本文关键字:参数 可接受 何设置 设置      更新时间:2023-09-26

我必须制作两种类型的url:/:culture/:author,它们都有一级url参数。虽然区域性是一组预定义的参数,如enesen-usbrfrit等,但作者可以是数据库中的任何用户名(区域性名称除外)。所以我想制定一个路由,当param在一组区域性中时,可以将用户发送到HomeCtrl,如果不是,则将他发送到AuthorCtrl。我能做什么?

.when('/:culture/', {
    templateUrl:'partials/home/home',
    controller:'vvHomeCtrl'
});

您可以将templateUrl和controller定义为函数,并使此路由类似于:

.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
        }
    }
});

对于简单的控制器来说,这是一个很好的解决方案。否则,请考虑使用来自路由器的解析(文档)。

通过检查区域性参数是否有效,我同意@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 */);