2016-04-27 125 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' 
    });