如何在两个模块之间共享服务 - @NgModule 以角度而不是在组件之间?

2024-04-13

在我的应用程序中,我有两个不同的引导模块(@NgModule)在一个应用程序中独立运行。没有一个角度应用程序位独立的引导模块,现在我希望它们应该相互通信并共享数据。

我知道通过@Injectable服务作为模块中的提供者,我可以在所有组件中共享数据@NgModule但我将如何在两个不同的模块(不是模块内的组件)之间共享数据。

有没有一种方法可以在另一个模块中访问一个服务对象?有没有办法可以访问浏览器内存中可用的 Service 对象并在我的其他角度模块中使用它?


根据 Angular 2 的最终版本,模块提供的服务可供导入该模块的所有其他模块使用。 这官方风格指南 https://angular.io/docs/ts/latest/guide/style-guide.html#!#app-structure-and-angular-modules建议应由某些人提供将在应用程序中的任何位置重用的应用程序范围服务(单例)Core Module,即要在main中导入App Module所以它可以注射到任何地方。

如果您不使用涉及具有共享单例的核心模块的结构,并且您正在独立开发两个 NgModule,并且希望其中一个中的服务在另一个中使用,那么唯一的解决方案是将提供程序导入到另一个 :

这是提供者模块:

/// some.module.ts
import { NgModule } from '@angular/core';

import { SomeComponent }   from './some.component';

@NgModule({
    imports: [],
    exports: [],
    declarations: [SomeComponent],
    providers: [ MyService ], // <======================= PROVIDE THE SERVICE
})
export class SomeModule { }

这是想要使用的另一个模块MyService

/// some-other.module.ts
import { NgModule } from '@angular/core';

import { SomeModule } from 'path/to/some.module'; // <=== IMPORT THE JSMODULE

import { SomeOtherComponent }   from './some.other.component';

@NgModule({
    imports: [ SomeModule ], // <======================== IMPORT THE NG MODULE
    exports: [],
    declarations: [SomeOtherComponent],
    providers: [],
})
export class SomeOtherModule { }

这样,服务应该可以注入到任何组件中SomeOtherModule声明,并在 SomeModule 本身中 - 只需在构造函数中请求它:

/// some-other.module.ts

import { MyService } from 'path/to/some.module/my-service';

/* ...
    rest of the module
*/

export class SomeOtherModule {
    constructor( private _myService: MyService) { <====== INJECT THE SERVICE
        this._myService.dosmth();
    }
}

如果这不能回答您的问题,我邀请您重新制定它。

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

如何在两个模块之间共享服务 - @NgModule 以角度而不是在组件之间? 的相关文章

随机推荐

  • Postgis - 如何通过 JDBC 使用数据类型“地理”

    从事一个网络项目 该项目使用postgresql 9 3 postgis 2 1 有一个类型的列geography在表中 它只存储一个point 现在我需要通过 JDBC 使用 Java 对象插入 选择类型 看完之后postgis手册 没有
  • 手动身份验证检查 Symfony 2

    我正在开发一个 Symfony 2 应用程序 用户必须在登录过程中选择一个配置文件 用户可能有多个配置文件可供使用 并且他们只知道自己的配置文件 因此 首先 我需要提示输入用户名和密码 如果这些正确 我不应该登录用户 我需要提示用户在会话期
  • NodeJs 中单线程和非阻塞 I/O 操作有什么区别?

    我一直在阅读并浏览尽可能多的 NodeJs 代码 但我对此有点困惑 Node 单线程和非阻塞 I O 到底意味着什么 我可以通过生成子进程来实现第一个 通过使用异步库来实现第二个 但我想弄清楚它的含义以及非阻塞 I O 如何仍然会减慢您的应
  • 创建产品 SDK:如何使用我正在创建的 SDK 添加本机库 (.so) 和 jar?

    我正在创建一个小部件 我们将提供给开发人员最终用户 它由 jar和一个本机库 so 使用 NDK 构建 JAR 有一个动态库的 JNI 接口 关于如何包含外部内容非常清楚 jar在项目中但没有如何包含依赖的动态库 我如何打包并构建 jar
  • EF Core 3 - 在Where子句中使用字符串的扩展方法

    我有一个简单的字符串扩展方法 public static class FrenchStringExtensions public static string ReplaceAccents this string str return str
  • Rails 3.1 Asset Pipeline 和 Uglifier 中可能存在的错误

    我在 Heroku 上部署时遇到了问题 导致 rake 任务失败 rake assets precompile 底部是集成时出现的错误 轨道3 1 Jquery 日历 https github com themouette jquery w
  • React 自定义挂钩内的 Apollo GraphQL 查询

    我正在尝试列出 Rick Morty API 中的所有角色 我编写了以下钩子以在我的组件中使用 该组件将呈现结果 当我对值进行硬编码时 例如 page 1 filter name Rick 查询运行得很好 如果我尝试使用变量 它会返回错误
  • 使用 WCF 使用 RESTful JSON API

    我是 WCF 的新手 而且一般对 NET 很生疏 所以很可能这是一个已回答的问题 但我只是错过了它 我正在构建一个 ASP NET MVC 应用程序 它将使用基于 RESTful JSON 的 API 作为后端 我一直在研究如何与 NET
  • 具有特定基数的映射(联结)表之间的联接

    我有一个关于执行特定联接的最有效方法的简单问题 就拿这三张表来说 为了保护无辜 已经改了实名 表 动物 animal id name 1 bunny 2 bear 3 cat 4 mouse 表 标签 tag id tag 1 fluffy
  • 将应用程序见解跟踪日志记录添加到 .net core 控制台应用程序

    我有一个 net core 控制台应用程序 不是 AspNetCore 我想添加应用程序见解日志记录 将跟踪日志推送到应用程序见解 我尝试过使用 Microsoft ApplicationInsights AspNetCore 但是当我这样
  • 释放对执行进程任务中使用的变量的锁定SSIS

    我有一个包裹Foreach容器 and 执行流程任务 inside 对于每个容器 在执行流程任务中出现一些错误时 它会重定向到OnError事件处理程序对于每个容器 我正在使用 exe 捕获错误标准误差变量任务的属性并在脚本任务中使用它On
  • 在 Python 中读取和/或更改 Windows 8 主卷 [重复]

    这个问题在这里已经有答案了 如何使用 python 更改笔记本电脑上的主音量 我知道一种方法 我使用 ctypes 模拟音量增大 音量减小按键 但在不知道当前音量的情况下 每当我启动应用程序进行校准时 我都必须让代码执行 50 次连续的音量
  • 将数据集转换为 XML

    我已经被这个问题困扰了几个小时 似乎无法弄清楚 所以我在这里问 好吧 我有这个功能 private void XmlDump XDocument doc new XDocument new XDeclaration 1 0 utf 8 ye
  • git 推送错误:src refspec main 与 Linux 上的任何内容都不匹配

    每当我尝试使用上传文件时git push u origin main我收到错误如下 error src refspec main does not match any error failed to push some refs to gi
  • 邮递员 Windows 身份验证 (NTLM) 不起作用

    我已经从 Visual Studio 模板创建了一个全新的 WebAPI 项目 目标框架netcoreapp3 1 我已经配置了窗口身份验证 我在 Postman 中使用 NTLM 配置创建了一个请求来调用我的 API 当我调试应用程序并通
  • 如何从字符串中删除特定字符(仅当它是字符串中的第一个或最后一个字符时)。

    假设我有一个字符串1 2 3 我想删除最后一个 或者如果字符串看起来像 1 2 3 or 1 2 3我还是想得到1 2 3作为我的结果 请尝试在您的回答中进行一些解释 我不想只是在不理解的情况下复制粘贴内容 谢谢 处理这样的 修剪 逗号的一
  • 在bash中,如何使用一个变量作为另一个变量名称的一部分?

    只是一个简单的问题 我有一些数组 array 0 1 2 3 array 1 1 2 3 我有一个变量a a 0 echo array a 0 出现严重替换错误 有谁知道正确的语法吗 您可以做的一件事是使用以下语法 array a arra
  • Windows Vista 中%allusersprofile% 文件夹的位置?

    Windows Vista 中 allusersprofile 文件夹的确切路径是什么 在某些系统上 我看到该文件夹 为 c Users All Users 在某些系统上它被映射到 C ProgramData 而在其他系统上它被映射到 C
  • Rails ActiveRecord 协会

    好的 这是我的问题 我有 3 个不同的模型 人员 角色 客户和商店 客户有很多商店 也可以有很多人 商店里人很多 人们有各种各样的角色 1 人可以在多个商店工作 并且他们在每个商店可能具有不同的角色 例如 乔可能是一家商店的助理经理和另一家
  • 如何在两个模块之间共享服务 - @NgModule 以角度而不是在组件之间?

    在我的应用程序中 我有两个不同的引导模块 NgModule 在一个应用程序中独立运行 没有一个角度应用程序位独立的引导模块 现在我希望它们应该相互通信并共享数据 我知道通过 Injectable服务作为模块中的提供者 我可以在所有组件中共享