【问题标题】:Angular2 pathLocationStrategy: url change cause page reloadAngular2 pathLocationStrategy:url更改导致页面重新加载
【发布时间】:2016-08-30 02:44:23
【问题描述】:

在使用HashLocationStrategy 时,我可以通过手动更改浏览器地址栏中的地址来更改路线,而无需重新加载页面。 IE。从mysite/#/home 导航到mysite/#/profile

但是,如果我使用PathLocationStrategy(这是默认位置策略),当我尝试做同样的事情时,我会重新加载不需要的页面。 IE。从mysite/home 导航到mysite/profile

有办法解决吗?

我正在使用 Angular 2.0.0-beta17

【问题讨论】:

  • 如果不看你实际在做什么就很难说。怎么改路线?
  • 我在浏览器的地址栏中手动更改它。 IE。当我使用哈希定位策略将mysite/#/home 更改为mysite/#/profile 时,它会更改路线,并且不会重新加载整个页面;然后,当我将应用程序的位置策略切换到 PathLocationStrategy 并尝试将 mysite/home 更改为 mysite/profile 时,它会进行不需要的页面刷新。
  • 我相应地更新了我的问题,更具体

标签: angular angular2-routing html5-history


【解决方案1】:

这是“按设计”。当您只更改 #... 时,没有任何内容可以发送到服务器。 #... 部分始终只由浏览器处理,从不发送到服务器。

当您更改# 之前的部分时,如果您没有#,则所有内容都是之前的-#-部分,则浏览器需要向服务器发出新请求以获取网址。

如果您使用window.history... API (https://developer.mozilla.org/en-US/docs/Web/API/History_API),那么您告诉浏览器只更新 URL 栏而不是调用服务器。 Angular 路由器使用此 API,因此它可以在应用程序内使用,或者在您使用后退或前进按钮时有效,但在您手动更改 URL 时无效。

【讨论】:

    【解决方案2】:

    如果您想使用 HTML5 路径 (PathLocationStrategy) 而无需 NG2 页面刷新路由更改,则必须使用 routerLink 指令,即:

    <a [routerLink]="['/my-page']">My Page</a>
    <a [routerLink]="['/my-other-page']">My Other Page</a>
    

    在@NgModule init 导入处:

    RouterModule.forRoot([
      {path: '',              component: DefaultComponent},
      {path: 'my-page',       component: MyPageComponent},
      {path: 'my-other-page', component: MyOtherPageComponent}
    ]);
    

    【讨论】:

    • 这实际上是正确的答案,加载精美!
    • @jemiloii 这不是在回答问题。如果用户单击这些链接,则使用 routerLink 有效,但如果用户将地址栏中的地址从 my-page 更改为 my-other-page 并按 Enter,页面仍将重新加载
    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2011-08-22
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多