2015-04-20 92 views
1

在AngularJS中,是否有攔截未在routeProvider中定義的路由更改的方法,以便可以在數據庫中查找路由,並且如果數據庫,新的路由可以添加到routeProvider?在沒有路徑匹配的情況下捕獲AngularJS中的路由更改

我讀過它可以動態地添加一條路線,但是我需要在當前路線不匹配的時候這樣做。

+1

看看這個:http://stackoverflow.com/questions/13153121/how-to-defer-routes-definition-in-angular-js/13173667#13173667 – nweg

+0

謝謝,我讀過它是可能會添加,但我需要捕獲事件或路由生命週期中角點引擎未找到匹配的點,以便我可以插入代碼來處理不匹配。 – MaryJosie

回答

0

我會用$ routeProvider的其他方式方法加載一個預定義的頁面(控制器)來處理不確定的路線。

otherwise({ 
    templateUrl: 'addRoute.html', 
    }); 

然後,進入該控制器,使用$ location($ location.url())獲取當前路由請求。 如果需要動態地添加這條路線:

$route.routes['/new'] = {templateUrl: 'new.html'}; 

最後,使用重定向到這條路線:

$location.path('/new'); 

顯然,對於這個工作,你將需要注入$路徑和$位置爲依賴於你控制器。

+0

這種方法對我來說非常合適。我可以使用像上面提到的那樣在其他選項中關聯的控制器中的$ location.path(),並在數據庫中查找它們下載初始路由到這一點之間的新頁面。 我不得不使用$ route.refresh()而不是$ location.path('/ new')。當前路徑已經是'/新',所以新路線沒有加載。 – MaryJosie

+0

我還想提一下,我通過http://stackoverflow.com/a/22496387/2857047添加了路由,因爲上面的$ route.routes ['/ new']方法在v1.3中無效。 – MaryJosie

0

假設你可以在控制器做到這一點,你可以捕捉到這些事件如下:

$rootScope.$on("$routeChangeSuccess", function (event, next, current) { 
    if(!angular.isDefined($route.current.$$route)) 
     addDynamicRoute('using techniques mentioned above'); 
    else 
     handleOtherStuff(); 
}); 
相關問題