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

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

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

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

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

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

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

..。

routes.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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-11 22:04:29

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

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

然后监听

对象(按照Adrian的建议):

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

这对我很有效。

票数 60
EN

Stack Overflow用户

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

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

Angular Router服务

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

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

我想指出的是

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

类型的对象

NavigationStart

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

票数 35
EN

Stack Overflow用户

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

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

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

https://stackoverflow.com/questions/39132737

复制
相关文章
【PY】根据 Excel 中的指示修改 JSON 数据
继上一次友友问了如何处理 Excel 中的数据之后,这次他又遇到了新问题,让我们一起来看看;
sidiot
2023/08/31
2650
【PY】根据 Excel 中的指示修改 JSON 数据
Lua中如何读写JSON
这是常用的方法,通过Lua对字符串进行解析,从而完成JSON的编码及解码。网络上有许多现成的Lua JSON库可以使用。
杜金房
2020/12/21
8.5K0
Lua中如何读写JSON
Lua中的元表和元方法
Lua中每个值都可具有元表。 元表是普通的Lua表,定义了原始值在某些特定操作下的行为。你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征。例如,当数字值作为加法的操作数时,Lua检查其元表中的"__add"字段是否有个函数。如果有,Lua调用它执行加法。
王亚昌
2019/05/26
1.7K0
Lua中的原表介绍及其使用举例
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
7570
由表生成代码:mybatis-generator入门
application.properties ## mapper xml 文件地址 mybatis.mapper-locations=classpath\*:mapper/\*Mapper.xml
道可道非常道
2019/05/05
4710
由表生成代码:mybatis-generator入门
lua解析json
Json 一种文本数据格式,具体参见菜鸟教程;  环境搭建 主机Ubuntu 16.04 安装sudo aptitude install lus-cjson 和lua 代码实现 test.json { "str":"hello world", "configs":[{ "user":"ubuntu", "password":"123456", "ip":"192.168.1.12" }, { "use
程序手艺人
2019/02/21
7.4K0
lua表排序
Lua作为一种很强大且轻量级脚本语言的存在,对于掌握其几乎无所不能的Table(其实就是一个Key Value的数据结构,它很像Javascript中的Object,或是PHP中的数组,在别的语言里叫Dict或Map)是十分必要的。对于Lua语言可参见酷壳Lua简明教程这篇Blog。 对于lua的table排序问题,一般的使用大多是按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之下,如果表内既有
晚晴幽草轩轩主
2018/03/27
2.8K0
JSON C# Class Generator —由json字符串生成C#实体类的工具
json作为互联网上轻量便捷的数据传输格式,越来越受到重视。但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率。JSON C# Class Generator 能将json格式所表示的Javascript对象转化成强类型的C#实体类,来实现减少代码输入的效果。
全栈程序员站长
2022/07/21
1K0
redis中的lua
前言 最近在看redis的lua,看了官网资料和网上一些文章,整理了lua的相关内容,希望对大家有帮助。 目录 0. redis中运行lua的流程的正常流程 1.redis中的lua概要信息     1.1 lua中调用redis命令     1.2 redis数据结构与lua数据结构对应关系     1.3 EVAL和EVALSHA     1.4 脚本缓存     1.5 脚本命令     1.6 其他约定         1.6.1 全局变量保护         1.6.2 Sele
温安适
2018/05/17
1.8K0
使用工具优化Lua的table访问
写Lua代码似乎不需要考虑性能,毕竟都用Lua了,如果考虑性能直接用C++不就好了。但是勤俭节约是中华民族传统美德,能省点cpu是一点。特别是在Lua使用越来越多的时候。
esrrhs
2023/03/06
5060
Lua生成的LDoc文档注释规范
函数参数@param 是不指明具体类型的, 若想指明的话可以用 @int, @string, @bool, @func, @tab, @thread 几个标签来.
bering
2020/03/19
4.2K0
Lua-原表
__index元方法 Lua 查找一个表元素时的规则,其实就是如下 3 个步骤:
祝你万事顺利
2019/05/31
3850
Lua下的excel配置表极致优化
项目中由于对于启动的优化,配置表量并不是特别大,但启动时长却不低,但对于应用类来说,对启动时长要求很严格。
用户7851139
2022/12/16
8870
Lua 中的常用API
luaL_newstate lua_State *luaL_newstate (void); 创建一个新的state luaL_openlibs void luaL_openlibs (lua_State *L); 打开所有的标准lua库到指定状态,也就是把所有标准类库加载到指定的虚拟机. luaL_loadfile int luaL_loadfile (lua_State *L, const char *filename); 加载文件的时候把它当一个lua模块 luaL_dofile和luaL
程序手艺人
2019/02/21
1.8K0
【游戏开发】小白学Lua——从Lua查找表元素的过程看元表、元方法
在上篇博客中,我们简单地学习了一下Lua的基本语法。其实在Lua中有一个还有一个叫元表的概念,不得不着重地探讨一下。元表在实际地开发中,也是会被极大程度地所使用到。本篇博客,就让我们从Lua查找表元素的过程,来探讨学习一下Lua中的元表。
马三小伙儿
2018/09/12
1.8K0
ASP.NET中的页面指示标识
页面指示标识 的功能是用来确定在处理aspx文件的时候,需要系统做一些什么特殊的设定?它的语法是: <%@ directive attribute=value %>   比如:<%import namespace="System.Data"%>
Java架构师必看
2021/03/22
1.6K0
点击加载更多

相似问题

访问由stringify生成的json

11

在lua C++中访问由表键索引的表

22

如何打印由JSON数据生成的表?

56

嵌套表中的Lua访问表值

21

lua中的Json表拉取

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文