首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Angular 2如何使用路由器和location.go()检测后退按钮按下?

Angular 2如何使用路由器和location.go()检测后退按钮按下?
EN

Stack Overflow用户
提问于 2016-08-25 04:44:47
回答 10查看 95.7K关注 0票数 39

我已经构建了一个应用程序,它使用

若要在应用程序分区之间切换,请执行以下操作。我还使用

若要模拟同一页的子节之间的切换,请执行以下操作。我使用了一些URL重写规则,以便将所有路由重定向到

在页面刷新情况下。这允许路由器接收所请求的子部分作为URL参数。基本上,我已经设法避免使用

..。

routes.ts

代码语言:javascript
代码运行次数:0
运行
复制
export const routes: RouterConfig = [
    {
        path: '',
        redirectTo: '/catalog',
        pathMatch: 'full'
    },
    {
        path: 'catalog',
        component: CatalogComponent
    },
    {
        path: 'catalog/:topCategory',
        component: CatalogComponent
    },
    {
        path: 'summary',
        component: SummaryComponent
    }
];

如果我点击导航栏中的一个小节,会发生两件事:

使用必要的字符串更新URL,以便指示当前子部分

一种风俗习惯

动画滚动页面顶部的请求小节。

如果我刷新页面,我将使用先前定义的路由并提取必要的参数来恢复滚动到所请求的小节。

代码语言:javascript
代码运行次数:0
运行
复制
this._activatedRoute.params
    .map(params => params['topCategory'])
    .subscribe(topCategory => {
        if (typeof topCategory !== 'undefined' &&
            topCategory !== null
        ) {
            self.UiState.startArrowWasDismised = true;
            self.UiState.selectedTopCategory = topCategory;
        }
    });

除了单击“后退”按钮外,其他所有操作都正常。如果上一页是不同的部分,则应用程序路由器将按预期运行。但是,如果前一个页面/ url是一个子部分,则url将更改为前一个页面/url,但在UI中不会发生任何变化。如何检测是否按下了后退按钮以调用

函数来再次完成它的工作?

我看到的大多数答案都是关于这个事件的

,但此事件不会在我的应用程序中触发,因为我毕竟在URL中没有哈希...

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2017-04-12 06:04:29

我不知道其他答案是否过时了,但它们都不适合我在Angular 7中工作。我所做的是通过将其导入到我的组件中来添加一个Angular事件侦听器:

代码语言:javascript
代码运行次数:0
运行
复制
import { HostListener } from '@angular/core';

然后监听

对象(按照Adrian的建议):

代码语言:javascript
代码运行次数:0
运行
复制
@HostListener('window:popstate', ['$event'])
  onPopState(event) {
    console.log('Back button pressed');
  }

这对我很有效。

票数 60
EN

Stack Overflow用户

发布于 2019-08-08 08:08:28

解决此问题的另一种方法是订阅

Angular Router服务

..。由于我们正在处理路由,因此在我看来,使用Router events更有意义。

代码语言:javascript
代码运行次数:0
运行
复制
constructor(router: Router) {
    router.events
      .subscribe((event: NavigationStart) => {
        if (event.navigationTrigger === 'popstate') {
          // Perform actions
        }
      });
}

我想指出的是

在浏览器上按后退和前进时发生。因此,为了有效地做到这一点,您必须找到一种方法来确定正在发生的是哪一种情况。对我来说,这只是使用

类型的对象

NavigationStart

它给出了关于用户来自哪里以及他们要去哪里的信息。

票数 35
EN

Stack Overflow用户

发布于 2017-07-04 16:52:23

要检测浏览器的后退按钮,请单击“import platformlocation from”@angular/common,并将以下代码放入您的构造函数中:

代码语言:javascript
代码运行次数:0
运行
复制
constructor(location: PlatformLocation) {
     location.onPopState(() => {
        alert(window.location);
     }); }
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39132737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档