如何在 Angular 中确定上一页 URL?

2024-06-19

假设我当前位于具有 URL 的页面上/user/:id。现在从本页导航到下一页:id/posts.

现在有没有办法让我可以检查之前的 URL 是什么,即/user/:id.

以下是我的路线

export const routes: Routes = [
  { 
    path: 'user/:id', component: UserProfileComponent
  },
  {  
    path: ':id/posts', component: UserPostsComponet 
  }
];

也许所有其他答案都是针对 Angular 2.X 的。

现在它不适用于 Angular 5.X。 我正在处理它。

仅使用 NavigationEnd,您无法获取之前的 url。

因为路由器从“NavigationStart”、“RoutesRecognized”、...到“NavigationEnd”工作。

您可以检查

router.events.forEach((event) => {
  console.log(event);
});

但即使使用“NavigationStart”,您仍然无法获取以前的网址。

现在您需要成对使用。

import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/pairwise';

constructor(private router: Router) {
  this.router.events
    .filter(e => e instanceof RoutesRecognized)
    .pairwise()
    .subscribe((event: any[]) => {
      console.log(event[0].urlAfterRedirects);
    });
}
    

通过pairwise,你可以看到url 的来源和目的地。

“RoutesRecognized”是从源 URL 到目标 URL 的变化步骤。

所以过滤它并从中获取以前的网址。

最后但并非最不重要的,

将此代码放在父组件或更高版本中(例如,app.component.ts)

因为此代码在完成路由后触发。

更新角度 6+

The events.filter给出错误,因为过滤器不是事件的一部分,因此将代码更改为

import { filter, pairwise } from 'rxjs/operators';

this.router.events
.pipe(filter((evt: any) => evt instanceof RoutesRecognized), pairwise())
.subscribe((events: RoutesRecognized[]) => {
  console.log('previous url', events[0].urlAfterRedirects);
  console.log('current url', events[1].urlAfterRedirects);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 中确定上一页 URL? 的相关文章

  • Leaflet MarkerCluster removeOutsideVisibleBounds 不起作用

    我有一张传单地图 使用Leaflet markercluster https github com Leaflet Leaflet markercluster plugin 集群在地图上正确绘制 但我注意到视图之外的集群仍在渲染 即使我有r
  • Angular 2 路由器导航无法使用相同的 url 第二次工作

    我有一个页面 单击按钮后 它将使用下面的路由器导航进行重定向 router navigate search data test 但是 当我第二次单击同一按钮而不更改值时 router navigate 将无法工作 我怎样才能覆盖它 欢迎所有
  • SVG 模式在 Safari 中不起作用

    我正在尝试使用 SVG 制作类似网格的图案 我看到非常奇怪的行为
  • 从 Angular 2 中的 FileReader 获取值

    我有以下组件加载文件并将其内容绑定为字符串 export class NgCsvComponent Input csv any Output csvChange any new EventEmitter public localCsv an
  • 用 Angular 6 进行业力测试

    我正在尝试使用 npm 运行角度测试 ng test 但问题是 chrome 在测试完成后启动而不停止 所以我使用了 ng test watch false 但这会导致错误 Chrome 69 0 3497 Linux 0 0 0 ERRO
  • Angular2 CLI Socket.io(第 3 方库导入)

    angular cli 0 0 39 node 6 2 2 os win32 x64 我尝试导入socket io 客户端 http socket io 进入使用生成的 angular2 应用程序角度 cli https github co
  • Angular 10 在从不同工作区渲染组件时使用库时无法读取 null 属性“bindingStartIndex”

    我创建了一个位于我的应用程序工作区之外的 Angular Library 结果是我有两个不同的工作空间 我的第一个方法是建立我的图书馆和链接 dist与我的应用程序的文件夹 这对于 ngserve 来说效果不太好 但无论如何我在渲染我的库组
  • 在 Angular 2 中将时间 hh:mm:ss 转换为 GMT 时间格式

    Input 时间 21 00 00 输出应该是 时间 2017年12月20日星期三21 00 00 GMT 0530 IST OR 时间 2017 12 20 21 00 00 您的输入是 21 00 00 将您的输入拆分为 使用下面的JS
  • 批处理文件运行 npm start

    我有一个角度应用程序 可以使用命令启动npm start在控制台中 现在我想创建一个批处理文件 在启动时执行 npm install 这是我创建的批处理文件 前端 bat cd
  • Angular 4.x + Cordova:FileReader 无提示失败(白屏死机)

    我有一个 Angular 4 3 Cordova 应用程序 曾经运行得很好 但现在 我在应用程序启动时出现黑屏 并且什么也没有发生 经过一段时间的挖掘 我意识到它来自哪里 我的主页受保护CanActivate守卫将检查一些文件系统持久的首选
  • 使用 AngularFireObject 和 switchMap

    我真的不知道如何解决这个问题 我该如何修复这个错误 in user service ts import Injectable from angular core import AngularFireDatabase AngularFireL
  • 如何在 Angular CLI 中重命名组件?

    除了手动编辑所有组件文件 例如文件夹名称 css ts spec ts 和 app module ts 之外 是否有任何快捷方式可以使用 Angular CLI 重命名组件 No 没有任何命令可以更改使用组件创建命令生成的所有文件的名称 于
  • 将嵌入的内容传递给嵌套列表的孙组件

    我知道有几个问题与此类似 但它们并不完全相同 我正在构建一个嵌套列表 我想在每个孙子中与常见 html 一起显示自定义 html 内容 当我在循环外部添加到 ListComponent 时 可以正常工作 但是如果我将其在循环内部传递给内部子
  • NG2:angular2-webpack-starter - HMR 的目的是什么?

    我正在清理我的 angular2 项目 出于多种原因 我决定从种子开始 This one https github com AngularClass angular2 webpack starter 该种子使用HMR https webpa
  • Angular 4 Subscribe方法多次调用

    我正在创建一个全局模态组件 我的问题是 当我调用 subscribe 方法时 它会根据调用的模态数量多次调用 如何防止对可观察订阅方法的多次调用 请检查下面我的代码 提前致谢 模态 model ts export class Modal t
  • 加载 ng2-table 数据表单 API

    我正在学习 Angular 2 我想使用 PHP 中的 API 数据填充 ng2 table 我有一个返回数据的服务 但我不知道如何使用服务的订阅数据填充数据变量 我正在调用服务方法 getLanguages 我的服务代码是 import
  • 将 PrimeNG 与 Bootstrap 4 结合使用

    目前 我正在为一个新的 Angular 2 项目使用 UI 库 我尝试了 Ng Bootstrap 和 Material 不幸的是它们仍处于 Alpha 和 Beta 阶段 我还检查了 PrimeNG 目前 PrimeNG 提供的组件比 M
  • Angular2 迭代对象数组

    我有一个如下所示的数组 causes any Specification Missing false Unclear false Wrong false Changed false Better Way false Design Missi
  • Angular 2 CLI - 部署

    我使用 Angular 2 CLI 构建了 Angular 2 应用程序 我现在的问题是我想将应用程序部署到本地服务器作为暂存环境以供其他人查看 大多数使用 Angular 2 CLI 的教程都展示了dist该文件夹似乎是在首次使用 CLI
  • 如何将 JSON 对象解析为 TypeScript 对象

    我目前正在尝试将收到的 JSON 对象转换为具有相同属性的 TypeScript 类 但无法使其工作 我究竟做错了什么 员工阶层 export class Employee firstname string lastname string

随机推荐