让 Angular2 路由器的手远离浏览器的地址栏
Keeping the Angular2 router's hands off of the browser's address bar
我正在构建一个单页 Angular 2.2.0 应用程序,它将成为嵌入式网站的一部分。该网站将有六个页面,Angular SPA 在 /application.html
。该应用程序将在不同时间 show/hide 各种组件,我正在使用路由器驱动这些组件。
我希望 /application.html
URL 得到维护,因为我不需要用户能够为 SPA 内的位置添加书签,网络服务器无法配置为映射 "not found" URLs 到其他地方,这将使 SPA 与网站的其余部分更好地共存。不幸的是,这不是 Angular 路由器的设计方式:它真的想玩浏览器的地址栏。
我已经解决了这两个后果;具体来说,当我的代码跳转到新位置时,我使用 skipLocationChange
属性,并且我没有使用 <a routerLink=...
工具在我的模板中添加链接。但是,还有第三个问题我还没有解决:Angular 启动时清除地址栏。
Angular 的路由器似乎需要地址栏的初始值等于主机页面中给出的 base
值。如果我有通常的 <base href="/">
,那么地址栏最初设置为 example.com/
。如果我改为使用 <base href="/application.html">
,那么地址栏将初始化为 example.com/application.html/
(请注意尾随 /
;关闭但没有雪茄)。这一切都非常令人沮丧;没有理由使用路由器需要放弃对地址栏的控制。
有没有办法避免 Angular 2 路由器弄乱浏览器的地址栏?或者,如果我不使用路由器,有没有办法让程序状态确定各种组件是否出现和消失? (后者实际上是所有可能世界中最好的;路由器系统非常受限。)
路由的好处来自于通过 URL 的状态管理。由于您不需要状态管理,所以我根本不会使用路由。使用
通过组件加载 "pages/views"
<page-one *ngIf="showPageOne"></page-one>, etc....
您仍然可以获得 angular 不加载未使用的组件的好处。否则,我会使用散列策略。
我正在构建一个单页 Angular 2.2.0 应用程序,它将成为嵌入式网站的一部分。该网站将有六个页面,Angular SPA 在 /application.html
。该应用程序将在不同时间 show/hide 各种组件,我正在使用路由器驱动这些组件。
我希望 /application.html
URL 得到维护,因为我不需要用户能够为 SPA 内的位置添加书签,网络服务器无法配置为映射 "not found" URLs 到其他地方,这将使 SPA 与网站的其余部分更好地共存。不幸的是,这不是 Angular 路由器的设计方式:它真的想玩浏览器的地址栏。
我已经解决了这两个后果;具体来说,当我的代码跳转到新位置时,我使用 skipLocationChange
属性,并且我没有使用 <a routerLink=...
工具在我的模板中添加链接。但是,还有第三个问题我还没有解决:Angular 启动时清除地址栏。
Angular 的路由器似乎需要地址栏的初始值等于主机页面中给出的 base
值。如果我有通常的 <base href="/">
,那么地址栏最初设置为 example.com/
。如果我改为使用 <base href="/application.html">
,那么地址栏将初始化为 example.com/application.html/
(请注意尾随 /
;关闭但没有雪茄)。这一切都非常令人沮丧;没有理由使用路由器需要放弃对地址栏的控制。
有没有办法避免 Angular 2 路由器弄乱浏览器的地址栏?或者,如果我不使用路由器,有没有办法让程序状态确定各种组件是否出现和消失? (后者实际上是所有可能世界中最好的;路由器系统非常受限。)
路由的好处来自于通过 URL 的状态管理。由于您不需要状态管理,所以我根本不会使用路由。使用
通过组件加载 "pages/views"<page-one *ngIf="showPageOne"></page-one>, etc....
您仍然可以获得 angular 不加载未使用的组件的好处。否则,我会使用散列策略。