【问题标题】:Skip jump link in browser's history using Angular 2使用 Angular 2 跳过浏览器历史记录中的跳转链接
【发布时间】:2017-06-18 06:43:32
【问题描述】:

我使用 Angular 2 (v2.4.4) 并使用 routerLink 在组件之间导航。

这很好用,但是如果我使用相同的快照参数 (active.snapshot.params) 加载非常保存的组件,页面将不会再次加载。因此,例如,如果我在/page/56 上单击此处指向/page/56 的链接,即相同的链接(来自菜单或其他内容),则该组件将不会重新加载。 (并且自上次加载以来数据库中的内容可能会发生变化,因此需要重新加载页面。)

我通过指向/jump/page/56 绕过它,Page 404 控制器重定向到/page/56

这也可以正常工作,但如果我在浏览器中从/page/56 导航回来,它会通过Page 404 控制器到达/jump/page/56,后者指向/page/56。所以基本上我无法返回。

据我所知,我无法通过 HTML5 历史 API 删除浏览器历史记录,但我怎么能通过单击浏览器的后退按钮返回到 /page/56 之前的页面?

解决方案可能是一个独立于 Angular 2 的简单 JavaScript 技巧,因为它实际上并不加载新页面,只是加载不同的组件并更改 URL。 (也是因为这个我不应该使用location.reload(),因为它会重新加载Angular 2和所有依赖的JS等)

提前感谢您的解决方案!

【问题讨论】:

    标签: javascript angular browser-history html5-history


    【解决方案1】:

    你可以使用 skipLocationChange Like :

    this.router.navigate(['/jump/page/12'],{skipLocationChange:true});

    【讨论】:

      【解决方案2】:

      似乎唯一的方法是创建自己的从[routerLink] 继承的指令来控制点击处理程序,或者只是将点击处理程序添加到当前元素并自行管理刷新。

       <a (click)="navigate(['/jump/page/56'])">Navigate</a>
      

      在哪里

      navigate(route) {
        this.router.navigate(route, {replaceUrl: true});
      }
      

      【讨论】:

      • 实际上,我想“刷新”页面的方式,如果我已经在上面,我不会调用location.reload()(因为它会重新加载整个系统,这需要大量时间),但我导航到不同的 NG2 组件,然后再返回。但是这样我在浏览器的历史记录中获得了额外的记录。当我向后导航时,我再次向前跳跃......
      • navigate 方法足够灵活,可以使用不同的参数获得不同的行为。您可以用作刷新页面(无需完全重新加载),而无需将点添加到您的历史设置 replaceUrl 选项。检查此链接。 angular.io/docs/ts/latest/api/router/index/…
      • 所以你的实现看起来像this.router.navigate(route, {replaceUrl: true});。您只需通过比较this.router.url 属性来检查您要导航到的网址是否为当前网址
      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2017-08-17
      • 2010-10-20
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多