Angular 2在路由时传递对象

2024-01-26

我试图在路由时在页面之间传递对象(数组)。为此我做了什么这个答案 https://stackoverflow.com/questions/35478994/angular-2-passing-object-via-route-params-possible说但这对我不起作用。

Service

@Injectable ()
export class ReportService extends HttpService {

    public selectedReports: any[] = [];

    public setSelectedReports (id: string, value: any) {
        this.selectedReports[id] = value;
    }

    public removeSelectedReports (id: string) {
         delete this.selectedReports[id];
    }
}

Parent

import { ReportService } from './';

@Component({
  providers: [ReportService]
})

export class ReportComponent {
  constructor (private reportService: ReportService) {}
}

Child 1

import { ReportService } from '../';
@Component({
  template: '<a [routerLink]="['stats']">Stats</a>'
})

export class ReportHomeComponent {

  constructor (private reportService: ReportService) {
    reportService.setSelectedReports (1, 'hello')
  }
}

Child 2

import { ReportService } from '../';

@Component({
})

export class ReportStatsComponent {

  constructor (private reportService: ReportService) {
    console.log(reportService.selectedReports)
  }
}

如果我点击a在第一个孩子中,我被重定向到第二个孩子。在更改页面之前,selectedReports[]充满。换页后就空了。我错过了什么吗?

我知道这个问题之前已经被问过,但我决定无论如何根据问题顶部链接中给出的答案的评论部分中的要求提出这个问题。


您可能会以两种不同的方式导入服务。在您正在使用的父组件中:

@Component({
  providers: [ReportService]  //<--unique instance injected into this component
})

这将创建一个新实例并将其注入到该组件和子组件树中。

如果您有ReportService中还指定了providers你的数组@NgModule那么孩子们很可能会从那里得到他们的实例。

对于这样的共享服务,我建议仅将服务添加到providers数组中的@NgModule。这为该模块中的所有组件提供了一个实例。鉴于providers组件装饰器中的数组为该组件提供了唯一的实例。

@NgModule({
  imports: [
    ...
  ],
  declarations: [
    ...
  ],
  providers: [ReportService],  //<--inject service here to be global to module
  bootstrap: [AppComponent]
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2在路由时传递对象 的相关文章

随机推荐

  • Swift 3 中的 UnsafePointer 初始化器

    我有一个收据验证类 自 Swift 3 发布以来已被弃用 我解决了一些问题 但仍然有很多 这是我使用的 GitHub 源代码 https gist github com baileysh9 4386ea92b047d97c7285 file
  • MySQL 开源报告服务

    我目前正在从事一个需要报告服务的项目 数据库后端是使用 MySQL 构建的 我希望有一个具有与 SSRS 类似功能的东西 有谁有这方面的开源解决方案的经验吗 他们有什么特别推荐的吗 必须通过浏览器访问它 Thanks David 当您说 报
  • 无法使用GDB进行远程调试

    我正在尝试使用 gdb 调试目标 但遭到拒绝 gdb 目标远程10 0 0 2 2345 使用10 0 0 2 2345进行远程调试 警告 架构拒绝了目标提供的描述 远程 g 数据包回复太长 00000000ba4eefbe00000000
  • 仅在 IE < 9 中按下“输入”时命令按钮不会提交

    我有2个
  • 在 M-x 编译中使用当前缓冲区的文件名

    我希望 emacs 使用当前缓冲区的文件名作为传递给的命令的一部分M x compile 例如 如果我正在编辑 foo rb 我想M x compile执行ruby foo rb 我尝试设置compilation command to li
  • 天数和总天数之间有什么区别?

    谁能告诉我 C 中这两个函数有什么区别 TotalDays 和 Days 因为我不确定应该在代码中使用哪一次 抱歉 这篇文章的信息量很少 但我能说的不多 由于我没有找到重复的内容 所以我在这里发表评论 始终阅读文档 http msdn mi
  • 如何在android中从互联网获取当前时间

    我正在制作一个应用程序 我想在其中从互联网获取当前时间 我知道如何使用设备获取时间System currentTimeMillis 即使经过很多搜索 我也没有得到任何关于如何从互联网获取它的线索 您可以使用以下程序从互联网时间服务器获取时间
  • MIPS 浮点:swc1 与 s.s

    我正在做一些涉及的工作MIPS汇编 我不断遇到这四个浮点加载 存储伪指令 l s l d s s s d 我在网上找到了一些文档 发现有四个 实际 指令似乎可以做同样的事情 lwc1 ldc1 swc1 and sdc1 我唯一的问题是 有
  • Java 和 Android 之间的 Base64 编码/解码错误

    我在 Java 和 Android 之间编码 解码 Base64 时遇到问题 这是我的案例 我在Java上使用ECC编写了加密 解密代码 我的代码运行得很好 然后我尝试在Java上加密字符串并在Android上解密这个加密的字符串 但失败了
  • 1-15 的正则表达式? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我很难为 0 15 的数字输入组合正
  • 我怎样才能快速转换这个日期格式?

    我想转换Wed Jul 01 04 48 51 0000 2015 to 2015 07 01我在下面尝试过 但它不能很好地执行 返回零 let d Wed Jul 01 04 48 51 0000 2015 let formatter N
  • OnLocationChanged 回调永远不会被调用

    我正在尝试使用以下命令获取用户当前位置LocationManager 我做了很多研究 似乎找不到任何人有同样的问题 这OnLocationChanged回调似乎从未被调用 下面是我的各种代码和 logcat protected Locati
  • 在 Windows Phone 上部署 Sencha 触摸应用程序

    我有一个现有的 Sencha touch 项目 我想将其部署在 Windows Phone 设备上 到目前为止 我已经尝试将 Sencha touch 与 Phonegap 结合起来 通过 Phonegap 进行部署 但没有成功 据报道 由
  • .:format 在 rake 路由中意味着什么

    我输入 rake 路线 然后得到一堆像这样的 url articles id format 我的问题是 什么是 format意思是 Rails Guides Routing 文章中并不清楚 并且没有其他有用的匹配项 format在 Stac
  • 笛卡尔坐标到极坐标(3d 坐标)

    如何在 3D 空间中的笛卡尔坐标系和极坐标系 以及反坐标系 之间进行转换 最好有一个 C 示例 但任何内容都将不胜感激 谢谢 Edit当考虑20 的变化时 不形成球体 Edit 2 private void Spherise for int
  • 如何在 ASP.NET 中上传图像文件而不进行任何回发

    我正在使用上传文件
  • 无法在 getRequiredModulePath 的 NodeObject.getText 处读取未定义的属性“文本”

    生成浏览器应用程序包时发生错误 阶段 设置 什么可能导致此错误 来自控制台的信息 生成浏览器应用程序包 阶段 设置 类型错误 无法读取未定义的属性 文本 在 NodeObject getText opt app root src node
  • Vee-Validate validateAll() 范围

    我有一个场景 我已经划分出 范围 一个表单 以便我可以使用以下函数一次验证小块 validateScope scope return this validator validateAll scope 我想在将整个表单提交到服务器之前对其进行
  • 如何从Word 2010 Addin(用C#开发)获取“KeyPress”事件?

    如何从用 C 开发的 Word 2010 Addin 捕获 KeyPress 事件 注意 我不是在寻找 复杂 的解决方案 例如挂钩之类的东西 而是在寻找漂亮整洁的解决方案 NET 甚至来自对象模型 我 手中 的应用程序对象是 Microso
  • Angular 2在路由时传递对象

    我试图在路由时在页面之间传递对象 数组 为此我做了什么这个答案 https stackoverflow com questions 35478994 angular 2 passing object via route params pos