如何设置角度路径参数的可接受值?

时间:2015-11-03 22:07:50

标签: javascript angularjs url-routing ngroute angularjs-ng-route

我必须制作两种类型的网址:/:culture/:author,其中两个网址都有第一级网址参数。虽然文化是由enesen-usbrfrit等预定义参数设置的,但作者可能是来自db的任何用户名(文化名称除外)。所以我想做一个路由,当param在一组文化中时可以将用户发送到HomeCtrl,如果没有,它会将他发送给AuthorCtrl。我该怎么办?

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

2 个答案:

答案 0 :(得分:1)

您可以将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
        }
    }
});

这是简单控制器的一个很好的解决方案。否则请考虑使用路由器的解析(docs)。

答案 1 :(得分: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 */);