AngularJS可选路由参数

时间:2016-04-27 18:29:06

标签: javascript angularjs

我有一个angularJS应用程序,其中路由可以是以下之一

www.website.com/blog/xyz
www.website.com/blog/xyz/title/other-params

在上一个网址中,title参数用于用户可读性,因此在网址中不是必须的。因此我在下面使用angularJS代码作为我的路线。

$routeProvider
    .when('/blog', {
        templateUrl : url,
        controller : 'blogsHome'
    })
    .when('/blog/:blog_id', {
        templateUrl : url,
        controller : 'blogInfo'
    })
    .when('/blog/:blog_id/:url_params*', {
        templateUrl : url,
        controller : 'blogInfo'
    });

现在,在上面的代码中,我必须在时添加 middle ,因为angular expect :url_params并且不能为空。有什么方法可以在语句时省略中间 吗?

2 个答案:

答案 0 :(得分:1)

添加*以动态使用 多级目录 ,并添加?以使用可选路径。但是,当您希望使用多个级别可选时,可以尝试这样?:multipleOptionalParams*?

所以试试这个:

$routeProvider
    .when('/', {
        templateUrl : 'blog.html',
        controller : 'myCtrl'
    })
    .when('/blog/:blog_id/?:url_params*?', {
        templateUrl : 'details.html',
        controller : 'details'
    });

可以访问Plunker Demo

答案 1 :(得分:0)

我想用第二个替换第三个来改变第一个匹配时的序列。

像这样,最复杂的第一个:

$routeProvider
    .when('/blog', {
        templateUrl : url,
        controller : 'blogsHome'
    })
    .when('/blog/:blog_id/:url_params*', {
        templateUrl : url,
        controller : 'blogInfo'
    })
    .when('/blog/:blog_id', {
        templateUrl : url,
        controller : 'blogInfo'
    });