Angular2路由器 - 在Base Href之前寻找路线?

时间:2017-01-24 16:43:45

标签: angularjs routing

情景:

  • 网站背后有一个CMS,可以为大多数人提供路由 网站。
  • 有一个Angular2应用程序控制着某个子部分 网站是SPA。
  • Angular2应用程序使用内置的Angular2路由器来执行此操作 路由工作正常,除了试图回去 该网站的Angular2部分。
  • @ angular / core version 2.4.0(和其他人,http等),@ angular / router version 3.4.0

对于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;
    }
}

我有什么东西在这里失踪吗?有没有一种简单的方法可以对未知路线上的角度路由器说,什么都不做?

谢谢!

1 个答案:

答案 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部分中的实际路由功能,因此我们能够在没有任何明显副作用的情况下执行此操作。

我只想发布解决方案,以防其他人遇到同样的问题。