2016-04-27 191 views
1

我有一个angularJS应用程序,在此路由可以是以下AngularJS可选路由参数

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

在最后一个网址,标题参数是利用用户的可读性的缘故,所以它不是在URL强制性的。因此,我使用下面的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' 
    }); 

现在,在上面的代码中,我不得不添加中间因为角度期望:url_params并不能为空。有没有什么办法可以省掉中间声明?

+1

的[angularjs途径可以有可能重复可选参数值?](http://stackoverflow.com/questions/17510962/can-angularjs-routes-have-optional-parameter-values) –

+0

@dxcorzo是的,但它不适用于* –

回答

1

添加*给您目录的多层次的动态和增加?工作与可选路径工作。但是,当你想与多层次可选工作,那么可以尝试这样?:multipleOptionalParams*?

所以试试这个:

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

可以参观Plunker Demo

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