情景:
对于Angular2部分,<base href>
标记设置为Angular2应该接管路由的路径(/ culture_code / subroute / < EM> angular_2_section / 路线)
<base href='/*culture_code*/*subroute*/*angular_2_section*/'>
platformBrowserDynamic绑定还提供APP_BASE_HREF提供的设置与<base href>
标记相同的网址(我不确定是否需要这两个标记,但我想确保它已设定)。
问题是当在浏览器中点击回来时,会将用户带回/ culture_code / subroute / cms_handled_route ,来自Angular的路由模块将其检测为未知路由(路径:&#39; **&#39;)然后我不确定如何将其从路由器中分离出来,因为路由的基本href不应该在那个网址上踢。 cms_handled_route 与 angular_2_section 处于同一级别,而<base href>
仅应在 angular_2_section
由于我希望它在那时返回到CMS路由,我尝试使用Location(来自@ 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 :(得分:0)
最后,事实证明问题不在于网站的Angular2部分,而是背面的Angular 1.5部分。 Angular1部分没有使用路由,但它使用$ locationProvider来更新URL而不重新加载页面,该页面有一个选项rewriteLinks导致我们的问题。
它试图重写链接,然后导致Angular2路由器说“嘿这条路线不存在”,因为它们是站点的隔离部分,然后我们被困在Angular2部分。这里有关于此设置的更多文档https://docs.angularjs.org/guide/$location#html-link-rewriting在HTML链接重写下,我们需要将其设置为false以强制它在Back()上重新加载页面。由于我们不使用Angular 1.5部分中的实际路由功能,因此我们能够在没有任何明显副作用的情况下执行此操作。
我只想发布解决方案,以防其他人遇到同样的问题。