保持Angular2路由器的手离开浏览器的地址栏

时间:2016-12-21 22:56:42

标签: url angular browser angular-ui-router single-page-application

我正在构建一个单页的Angular 2.2.0应用程序,它将成为嵌入式网站的一部分。该网站将有六页,Angular SPA位于/application.html。应用程序将在不同时间显示/隐藏各种组件,我正在使用路由器驱动。

我希望维护/application.html网址,因为我不需要用户能够为SPA内的位置添加书签,因此无法将网络服务器配置为将“未找到”网址映射到某处否则,它会使SPA更好地与网站的其他部分共存。不幸的是,这不是Angular路由器的设计方式:它本身想要使用浏览器的地址栏。

我已经解决了两个这样的后果;特别是当我的代码跳转到一个新位置时,我正在使用skipLocationChange属性,而我没有使用<a routerLink=...工具在我的模板中有链接。但是,我还没有解决第三个问题:在启动时角度清除地址栏。

Angular的路由器似乎需要地址栏的初始值等于主机页面中给出的base值。如果我有通常的<base href="/">,则地址栏最初设置为example.com/。如果我改为使用<base href="/application.html">,则地址栏会初始化为example.com/application.html/(请注意尾随/;关闭但没有雪茄)。这一切都非常令人沮丧;没有理由使用路由器应该要求放弃控制地址栏。

有没有办法防止Angular 2路由器搞乱浏览器的地址栏?或者,如果我不使用路由器,有没有办法让程序状态确定各种组件是否出现和消失? (后者实际上是所有可能世界中最好的;路由器系统非常有限。)

1 个答案:

答案 0 :(得分:1)

Routings的好处来自于通过URL进行的州管理。由于您不需要该状态管理,我根本不会使用路由。加载您的&#34;页面/视图&#34;通过

组件
<page-one *ngIf="showPageOne"></page-one>, etc....

您仍然可以获得角度不加载未使用的组件的好处。否则,我会使用哈希策略。