在 Angular2 中跨模块共享服务的最佳方式是什么

2023-11-27

我正在使用如下所述的应用程序结构

index.ts
|-app.module.ts
|-app.component.ts
|--hero (directory)
   |-hero.module.ts
   |-hero.ts (Data Object)
   |-hero.service.ts
   |-hero.component.ts
   |-index.ts (this file exports data obj, service, component & module)
|--dashboard (directory)
   |-dashboard.module.ts
   |-dashboard.component.ts
   |-index.ts (this file exports module and component)

我希望在仪表板组件中使用英雄服务。 下面是我现在正在使用的代码片段,它按预期工作。但不确定这是否是一个好的做法。

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

import { Hero, HeroService } from '../hero/index';
import {Router} from '@angular/router';

@Component({
    moduleId: module.id,
    selector: 'my-dashboard',
    templateUrl: 'dashboard.component.html',
    styleUrls: ['dashboard.component.css']
})
export class DashboardComponent implements OnInit {
    heroes: Hero[] = [];

    constructor(private heroService: HeroService, private router: Router) { }

    ngOnInit(): void {
        this.heroService.getHeroes()
            .then(heroes => this.heroes = heroes.slice(1, 5));
    }

    gotoDetail(hero: Hero): void {
        let link = ['/detail', hero.id];
        this.router.navigate(link);
    }
}

我很想知道是否有任何方法可以参考 HeroModule 访问 HeroService 而不是单独导入Hero对象和HeroService from ../hero/index


from Range.io

到目前为止,我们的问题是我们正在不同级别的相同服务中创建两个实例。 DI 树。在树的下部分支中创建的实例是 隐藏在根级别定义的内容。解决方案?避免 在 DI 树的较低级别中创建第二个实例 延迟加载模块,仅使用在以下位置注册的服务实例 树的根。

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CounterService } from './counter.service';

@NgModule({})
export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [CounterService]
    };
  }
}

通过此设置,我们可以将此模块导入到我们的根模块中 AppModule调用forRoot方法注册模块并 服务。

...
import { SharedModule } from './shared/shared.module';

@NgModule({
  imports: [
    SharedModule.forRoot(),
    ...
  ],
  ...
})
export class AppModule {}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular2 中跨模块共享服务的最佳方式是什么 的相关文章

随机推荐

  • ggplot2:添加几何图形而不影响限制

    我想向 ggplot 密度图添加额外的几何图形 但无需更改数据的显示限制 也无需通过自定义代码计算所需的限制 举个例子 set seed 12345 N 1000 d data frame measured ifelse rbernoull
  • 清除 MKMapView 的图块缓存吗?

    我正在开发一款使用 MKMapView 作为游戏场的 iPhone 游戏 玩了几分钟后 应用程序不可避免地开始变得缓慢 并最终由于内存不足而崩溃 经过深入研究 罪魁祸首似乎是地图视图不断需要更多内存 游戏需要对地图进行大量缩放和平移 因此我
  • 如何在C/C++中设置ffmpeg qscale进行图像编码

    我有一个使用 ffmpeg 作为后端的 C 工作图像编码器 我正在将视频输入并将帧保存为 jpeg 但我在调整输出 jpeg 的质量时遇到困难 我尝试过的事情 环境AVCodecContext s global quality and co
  • 为什么函数原型位于不同的函数块内?

    我试图通过 K R 来理解 C 我无法理解书中发现的两个函数的代码 void qsort int v int left int right int i last void swap int v int i int j if left gt
  • NetBeans 使用哪种 Java 编译器?

    如果我告诉 NetBeans 6 9 在保存时进行编译 NetBeans 会警告我编译的类与使用 JDK 编译器编译的类不同 在同一对话框中 Java 平台设置为 JDK 1 6 NetBeans 使用哪个编译器 为什么 NetBeans
  • .NET FtpWebRequest 是否支持隐式 (FTPS) 和显式 (FTPES)?

    我被要求支持隐式和显式 FTPS 也称为 FTPES 我们目前使用的是 NETFtpWebRequest 是否FtpWebRequest支持两种类型的FTPES 有什么区别 Thanks 据我所知 当前 NET 2 0 和 3 5 版本的
  • 根据 Pandas python 中的两个条件选择数据帧的行

    我有一个 df 我想运行类似的命令 subsetdf df loc df Item Desc str contains X True or df Item Desc str contains Y True 选择 项目描述 列中包含 X 或
  • Emacs 中 LaTeX 的代码折叠

    是否有一个 Emacs 次要模式 或一段 elisp 代码 可以让您在 LaTeX 模式下有选择地隐藏 显示环境 例如 我想移动到一个很长的开头 begin figure 块 击键 然后将该图形环境的内容隐藏在视图中 类似地与 begin
  • Android 的仪器测试 - 方向改变后如何接收新的 Activity?

    我正在尝试测试新创建的活动 方向更改后 是否已正确重新初始化 下面的代码显示从 getActivity 返回的活动是在 setUp 中构造的活动 而不是新创建的活动 Test public class MyActivityTest exte
  • 如何在使用按键移动时在 pygame 中转动精灵

    So basically ive been hoping it would be possible to effectively turn your sprite while moving it around with WASD Any i
  • 当 UIViewController 被释放时,调度队列会发生什么?

    我试图更好地理解保留周期 特别是相对于调度队列 我正在使用 AVFoundation 并在 sessionQueue 上管理 AVCaptureSession private let sessionQueue DispatchQueue l
  • 正则表达式提取两个字符或标签之间的所有子字符串

    我需要提取由两个字符 或者可能是两个标签 包围的所有字符串 这就是我到目前为止所做的 NSRegularExpression regex NSRegularExpression regularExpressionWithPattern op
  • MySQL删除重复记录但保留最新记录

    我有独特的id and email字段 电子邮件会重复 我只想保留所有重复项的一个电子邮件地址 但包含最新的id 最后插入的记录 我怎样才能实现这个目标 想象一下你的桌子test包含以下数据 select id email from tes
  • 与 Xcode 分开安装 Git

    首先 我很抱歉这是一个非常简单的问题 但 Git 对我来说绝对是全新的 基本上 我已经涉足 iOS 开发一段时间了 现在有了一个项目想法 我想开始研究 并且我第一次计划将其纳入源代码管理 现在我知道 Xcode 4 有一些 Git 集成 但
  • mariadb IF 语句错误消息?

    我测试sql查询 IF 3 3 THEN SELECT TRUE ELSE SELECT FALSE END IF 我在 SQLyog 中执行查询 我收到下面的错误消息 You have an error in your SQL synta
  • 多对多关系的内联表单集的挂件

    遵循凯文 迪亚斯 Kevin Dias 的指示本文 我尝试为两个相关模型生成一种表单 这似乎适用于一对多关系 但是我在使用多对多关系时遇到了问题 以下是用户角色管理的一些示例代码 models py from django db impor
  • 如何授予 SQL Server 读取我的 SSL 密钥的权限?

    我最近创建了一个自签名证书并在 SQL Server 2014 中打开了加密 问题是现在 SQL Server 服务无法启动 本文from 2010 将问题识别为权限问题 SQL Server 服务没有读取 SSL 证书私钥的必要权限 问题
  • 如何计算 linq to sql 查询中列值的总和?

    我写这个查询 var query2 from p in behzad Compare closed numbers in CRM and Billing system detail counters where p fileid point
  • Eclipse 调试 - 行:不可用

    我似乎在谷歌上找不到任何东西告诉我为什么会这样以及解决方案是什么 我正在逐步执行第三方代码 我有源代码 并且非常希望看到当前行正在执行 查看 javac 编译标志 我看到 g none 标志 如果设置了此标志 这是否足以解释为什么我看不到行
  • 在 Angular2 中跨模块共享服务的最佳方式是什么

    我正在使用如下所述的应用程序结构 index ts app module ts app component ts hero directory hero module ts hero ts Data Object hero service