Angular - routerLink 和状态问题

2024-03-24

我想使用 routerLink 和状态从 html 页面路由到另一个页面。 使用标签没有问题,在登陆页面的 ngOnInit 期间,我可以按预期检索状态。 使用标签主页也可以导航,但状态结果未定义。

我有什么错吗?

登录页面的html

<button routerLink="/home" [state]="navExtra.state">
    Go Home Page via button
</button>
<a routerLink="/home" [state]="navExtra.state">Go Home Page via a</a>

登录页面的ts

import { Component, OnInit } from '@angular/core';
import { NavigationExtras } from '@angular/router';

@Component({
  selector: 'app-login',
  templateUrl: './login.page.html',
  styleUrls: ['./login.page.scss']
})
export class LoginPage implements OnInit {
  navExtra: NavigationExtras = {
    state: { data: { a: 'a', b: 'b' } }
  };
  constructor() {}

  ngOnInit() {}
}

主页 ts

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';

@Component({
  selector: 'app-home',
  templateUrl: './home.page.html',
  styleUrls: ['./home.page.scss']
})
export class HomePage implements OnInit {
  constructor(
    private router: Router
  ) {}

  ngOnInit() {
    console.log(this.router.getCurrentNavigation().extras.state);
  }
}

我认为不可能通过state通过一个按钮。如果我们检查源代码routerLink, 我们可以看到...

when not an a tag:

@Directive({selector: ':not(a):not(area)[routerLink]'})

state不包含在extras:

@HostListener('click')
onClick(): boolean {
  const extras = {
    skipLocationChange: attrBoolValue(this.skipLocationChange),
    replaceUrl: attrBoolValue(this.replaceUrl),
  };
  this.router.navigateByUrl(this.urlTree, extras);
  return true;
}

source https://github.com/angular/angular/blob/8.2.8/packages/router/src/directives/router_link.ts#L163

而当我们有一个a tag:

@Directive({selector: 'a[routerLink],area[routerLink]'})

它包括:

@HostListener('click', [/** .... **/])
onClick(/** .... **/): boolean {
  // .....
  const extras = {
    skipLocationChange: attrBoolValue(this.skipLocationChange),
    replaceUrl: attrBoolValue(this.replaceUrl),
    state: this.state // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< here!
  };
  this.router.navigateByUrl(this.urlTree, extras);
  return false;
}

source https://github.com/angular/angular/blob/8.2.8/packages/router/src/directives/router_link.ts#L263

因此,您的选择是将该链接设置为看起来像按钮,或者然后在单击按钮时调用执行导航的函数,如其他答案中所示,在这里我请参考由阿博法兹R:

this.router.navigate(['home'], this.navExtra);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular - routerLink 和状态问题 的相关文章

随机推荐

  • 运行比内核数量更多的分区是否有意义?

    鉴于 Spark 任务数量不能高于核心数量 运行比核心数量更多的分区是否有意义 如果是这样 您能详细说明一下吗 正如您提到的 您需要至少 1 个任务 核心才能利用所有集群的资源 根据每个阶段 任务所需的处理类型 您可能会遇到处理 数据倾斜
  • 如何在单个 mysql 查询中连接多个关系表中的多个值

    我的 旅行优惠 项目有一个大问题 99 正常 但不是 100 我有一个包含报价的主表 其中每个报价可以设置多个部门城市以及多个目的地城市 这是减少列的减少样本 例如 我提供一些从英格兰出发的旅行 其中部门城市可以是伦敦 利兹和曼彻斯特 目的
  • Android 无法捕获 NullPointerException

    我的应用程序中有一个非常烦人的 NPE 但找不到解决方案 首先是堆栈跟踪 09 12 23 27 32 855 ERROR AndroidRuntime 19152 java lang NullPointerException 09 12
  • 为了确保数值稳定性,scipy.signal.deconvolve 的除数参数有哪些限制?

    这是我的问题 我将处理来自系统的数据 我将很好地了解该系统的脉冲响应 之前使用 Python 进行过一些基本脚本编写 我开始了解 scipy signal convolve 和 scipy signal deconvolve 函数 为了对我
  • 哲学家就餐实施[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我只是想知道这是否可以解决java中的哲学家就餐问题 import java util concurrent locks Lock import ja
  • Scala self 类型和集合中的 this.type 问题

    我试图理解 scala 中抽象和显式的自我类型 让我们考虑这个例子 我想为可扩展树创建一个基础 就像这样简单 trait Tree def children Iterable Tree def descendants Iterable Tr
  • 如何在 Fluent NHibernate 中将“级联删除”选项设置为“设置空”?

    我是 Fluent nHibernate 的新手 想知道 如果我有两个类 Profile 和 Email 一对多映射 如下所示 我想流畅地定义一个 nHibernate 映射 这样当 Profile 被删除时 Email 将保留在DB 键设
  • 从 Android 加速度计获取倾斜角度

    我有一个实现的类SensorEventListener我想得到 这tilt Angle我的设备使用Accelerometer 我在互联网上寻找示例 但他们使用Sensor TYPE MAGNETIC FIELD 我相信我的设备没有这个传感器
  • 我解释 DI 和 IoC 的方式有什么问题?

    昨天在一次采访中我被问到春季的 DI 和 IoC 是什么 我的回复是 when a class A 延伸摘要class B 或实施interface B 或创建一个对象class B 其中任何一个类 那么A据说是 依赖于B 注入这个依赖关系
  • winforms:使用parallel.foreach更新进度

    我没有看到任何与我的问题相关的帖子 因此 如果我发布已经提出的问题 我深表歉意 我有一个 Windows 窗体程序 C 用于检查股票并进行分析 主窗体通过新线程和 ShowDialog 启动另一个窗体 当它加载时 它正在运行parallel
  • Spring ThreadPoolTask​​Executor 的工作原理

    我一直在阅读 Spring 的 ThreadPoolTask Executor 的设置如何协同工作以及线程池和队列如何工作 This https stackoverflow com a 43874563 10727434stackoverf
  • 如何在 swift 中向我的 cocoa 应用程序添加设置?

    我对 Swift 编程还很陌生 我想知道是否有一种简单的方法可以在 Swift 中向我的 Cocoa 应用程序添加设置 首选项 如果可能的话 我想要一份分步指南 我主要想知道如何将用户的首选项存储在磁盘和代码部分上 在我当前的代码中 它将需
  • .NET 多个类库合二为一

    我在VS2008中工作 我有一个自定义类库 CL1 它引用另一个自定义类库 CL2 最终我的发布文件夹中包含了 CL1 和 CL2 现在 CL1 的使用者需要在项目中包含两个 dll 我认为这是不合适的 我强烈地感觉到必须有一种方法来实现单
  • 在用户接受同意之前暂时禁用 Firebase 的所有服务

    我有一个实施了 Firebase 的应用程序 我想要的是在用户接受数据收集同意之前禁用与 Firebase 相关的所有内容 在 android 文档中 我看到 例如 我可以使用以下方法禁用 Firebase Analytics setAna
  • 该字段泄漏上下文对象

    我在非 Activity 中使用 Context 对象 它工作正常 但问题是它显示警告 That is where I am using the context object Here is the result of inspection
  • 如何在 JDBC url 中正确传递会话变量?

    我必须增加group concat max len 我无法通过preparestatement 做到这一点 而且我也无法在mysql my conf 文件中做到这一点 我在 mysql 文档中发现有一个选项可以在 url 中传递会话变量 但
  • Python argparse 字典 arg

    我想收到一个dict str gt str 来自命令行的参数 做argparse ArgumentParser提供吗 或者还有其他图书馆吗 对于命令行 program py dict d key key1 value val1 key ke
  • 为什么

    编辑 另请参阅下面我自己的答案 2016 例如 ul li class first a href title Home a li li a href title Chi siamo a ul li a href title item1 a
  • 动态调用DLL中的方法

    我有一个包含一些方法 显示 隐藏和验证 的 DLL 这是其中一种方法的示例hide Panel paneldynamic String id List
  • Angular - routerLink 和状态问题

    我想使用 routerLink 和状态从 html 页面路由到另一个页面 使用标签没有问题 在登陆页面的 ngOnInit 期间 我可以按预期检索状态 使用标签主页也可以导航 但状态结果未定义 我有什么错吗 登录页面的html