2017-01-24 32 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部分使用实际的路由功能,所以我们能够做到这一点,而没有任何明显的副作用。

我只是想发布解决方案,以防其他人有相同的问题。