我有一个组件,我需要检测用户是否按下浏览器中的"后退"按钮以向后导航.

目前我正在订阅路由事件.

constructor(private router: Router, private activatedRoute: ActivatedRoute) {

    this.routerSubscription = router.events
        .subscribe(event => {

            // if (event.navigatesBack()) ...

        });

}

我知道我可以使用window.onpopstate,但使用Angular2时感觉像是一个黑客.

推荐答案


EDIT

官方文件称"这个类不应该被应用程序开发人员直接使用,而应该使用Location."参考:https://angular.io/api/common/PlatformLocation


可以使用PlatformLocation,它有onPopState个侦听器.

import { PlatformLocation } from '@angular/common'

(...)

constructor(location: PlatformLocation) {

    location.onPopState(() => {

        console.log('pressed back!');

    });

}

(...)

Typescript相关问答推荐

对可变位置的父对象的TypScript空判断

TypScript中的算法运算式

如何根据数据类型动态注入组件?

TypScript在对象上强制执行值类型时推断对象文字类型?

如果我有对象的Typescript类型,如何使用其值的类型?

Angular 17 -如何在for循环内创建一些加载?

如何推断类方法未知返回类型并在属性中使用它

替代语法/逻辑以避免TS变量被分配之前使用." "

React router 6.22.3不只是在生产模式下显示,为什么?

typescribe警告,explate—deps,useEffect依赖项列表

Webpack说你可能需要在Reactjs项目中增加一个加载器''

部分类型化非 struct 化对象参数

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

在实现自定义主题后,Angular 不会更新视图

Angular 自定义验证控件未获得表单值

如何连接属性名称和值?

如何正确地将元组表格输入到对象数组实用函数(如ZIP)中,避免在TypeScrip 5.2.2中合并所有值

TS不能自己推断函数返回类型

TypeScript中的这些条件类型映射方法之间有什么区别?

Typescript循环函数引用