2013-04-13 100 views
0

我遇到了一些我無法解釋的行爲,但我相信別人可以。我設置了我的應用程序模塊,像這樣:在URL開頭的變量AngularJS路由

var appmodule = angular.module('appmodule', ['ui']).config(
['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/dashboard', { 
     templateUrl: 'partials/dashboard.html', 
     controller: dashCtr, 
     layer: 'main' 
     }). 
     when('/:campaignId/edit', { 
     templateUrl: 'partials/edit.html', 
     controller: campaignCtr, 
     layer: 'layer1' 
     }). 
     when('/:campaignId', { 
     templateUrl: 'partials/campaign_info.html', 
     controller: campaignCtr, 
     layer: 'layer1' 
     }). 
     when('/inbox', { 
     templateUrl: 'partials/inbox.html', 
     controller: inboxCtr, 
     layer: 'main' 
     }). 
     otherwise({redirectTo: '/dashboard'}); 
}]); 

當我瀏覽到app.com/:campaignId或app.com/:campaignId/edit,預期所有的作品,但如果我嘗試app.com /收件箱(或其他任何東西),我會重定向回/儀表板。我讀過其他幾個地方的URL不能以變量開始,但我對這個概念不熟悉(通常只是設計前端的一面),不明白爲什麼。

謝謝。

回答

2

嗯,這只是因爲inbox路線低於''/:campaignId'路線。角度檢查規則按其定義的順序排列,「/:campaignId」規則匹配每一個網址,因此沒有機會到達「收件箱」路線。

只需在所有其他路線之後定義'/:campaign'路線,並且所有內容都應該可以工作。

+0

啊,很酷。您的解決方案可以正常工作,但我還將路由更改爲/ campaign /:campaignId,無論它在何處定義,都可以使用它。 – elliottregan