2017-01-24 61 views
0

場景:Angular2路由器 - 尋找Base Href之前的路線?

  • 有一個CMS,它的路由爲廣大 站點的站點後面。
  • 有一個Angular2應用程序控制着SPA的 網站的某個子部分。
  • Angular2應用程序使用內置的Angular2路由器來執行 工作正常,除非嘗試返回網站的Angular2部分的 。
  • @角/芯版本2.4.0(和其他人,HTTP等),@角/路由器版本3.4.0

對於Angular2段,<base href>標籤被設置爲路徑,其中所述Angular2應該接管路由(/ culture_code/subroute/angular_2_section/路線

<base href='/*culture_code*/*subroute*/*angular_2_section*/'> 

的platfor mBrowserDynamic綁定也有APP_BASE_HREF提供了與<base href>標籤(我不確定是否有必要同時擁有但我想確保它已設置)相同的url。

的問題是,在瀏覽器中,這將使用戶返回到/ culture_code點擊回來時/subroute/cms_handled_route,從角路徑模塊被檢測它作爲未知路由(路徑: '**'),然後我不知道如何將它從路由器中分離出來,因爲路由的基礎href不應該在該URL中踢in。該cms_handled_route處於同一水平angular_2_section<base href>因爲我希望它回到CMS路由在這一點上應該只後angular_2_section

開始,我一直在使用地點(試過from @ angular/common)做一個back(),但它似乎仍然卡住。我試圖通過在訪問未知路由時將它置於CanLoad Guard中的location.back(),但我確信必須有更好的方法來做到這一點。

import { Injectable } from '@angular/core'; 
import { Route, CanActivate, CanActivateChild, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 
import { Location } from "@angular/common"; 
import { LoggerService } from '@shared2/services/logger.service'; 
import { Observable } from 'rxjs/Observable'; 

@Injectable() 
export class RouteUnknownGuard implements CanLoad { 
    constructor(private location: Location, private loggerService: LoggerService) { 
    } 

    canLoad(route: Route): Observable<boolean> | boolean { 
     this.loggerService.log('Route Unknown - Change to Location routing: ' + this.location.path); 
     this.location.back(); 
     return false; 
    } 
} 

有什麼我在這裏失蹤?有沒有一種簡單的方式對未知路由上的角路由器說,不要做任何事情?

謝謝!

回答

0

最後,事實證明,這個問題並非出現在網站的Angular2部分,而是出現在後面的Angular 1.5部分。 Angular1部分沒有使用路由,但它使用$ locationProvider來更新網址而不重新加載頁面,該頁面有一個選項rewriteLinks,它對我們造成了問題。

它試圖重寫鏈接,然後導致Angular2路由器說「嘿,這條路線不存在」,因爲它們是網站的隔離部分,然後我們被困在Angular2部分。在HTML鏈接重寫下,這裏有更多關於這個設置的文檔https://docs.angularjs.org/guide/$location#html-link-rewriting,我們需要將其設置爲false以強制它重新加載Back()上的頁面。由於我們沒有在Angular 1.5部分使用實際的路由功能,所以我們能夠做到這一點,而沒有任何明顯的副作用。

我只是想發佈解決方案,以防其他人有相同的問題。