从页面/组件中的服务共享相同的 Observable

2023-12-15

我正在尝试订阅相同的内容Observable多次但不起作用。我有一个提供者可以为我提供Observable from AngularFirestore目的。这是我的提供者:

@Injectable()
export class MyProvider {
  private myObservable: Observable<any>;
  constructor(private aFs: AngularFirestore) {
    //retriving some data and putting in myObservable
  }

  getObservable() {
    return this.myObservable;
  }
}

In my myPage.ts I do:

this.mySubscription = this.myProvider.getObservable().subscribe(value => {
  //something that works
});

在另一个组件中我做了同样的事情,但它没有给我任何东西。我如何分享Observable来自服务或提供商?我尝试过unsubscribe()当我从页面弹出到组件时,当我调用unsubscribe()在组件上,然后导航到我的页面,subscribe()不起作用。

To unsubscribe()在我的页面中我这样做:

ionViewWillLeave() {
  this.mySubscription.unsubscribe();
}

To unsubscribe()在我的组件中,在导航到我的页面之前,我会执行以下操作:

myEvent() {
  this.mySubscription.unsubscribe();
  this.navCtrl.push(MyPage);
}

当我从我的页面弹出时unsubscribe()似乎工作正常,因为我可以看到myObservable我的组件中的数据。当我尝试从我的组件导航到MyPage the unsubscribe()似乎不起作用,因为我什么也看不见。我也尝试过调试,但我看不到任何内容subscribe()在第二种情况下。

我将我的提供商导入到app.module.ts under providers然后我将其导入到我的页面中:

我的页面.ts

import { MyProvider } from ..;

构造函数(MyPage.ts):

constructor(private myProvider: MyProvider) {..}

在我的组件中:

我的组件.ts

import { MyProvider } from ..;

构造函数(Home.ts)

constructor(private myProvider: MyProvider) {..}

我澄清一下MyComponent未用于MyPage!我用它在Home然后我用它来推动MyPage。我这样做是因为我想显示简单的数据MyComponent然后我想推动MyPage其中包含数据详细信息。

我想轻松地共享从组件和页面上的服务检索到的相同 Observable,并且我想subscribe()两者都有。这可能吗?


如果您的目标是多播数据,请使用 RXJSSubject or BehaviorSubject
Subject充当源之间的桥梁/代理Observable还有很多observers,使得可以有多个observers分享相同的Observable执行。
这种推荐的暴露受试者的方式是使用asObservable()操作员。

@Injectable()
export class MyProvider {
  private myObservable=new Subject<any>();
  CurrentData = this.myObservable.asObservable();
  constructor(private aFs: AngularFirestore) {
    //your logic
      this.myObservable.next(value);//push data into observable
  }


}

Page.ts

this.mySubscription = this.myProvider.CurrentData.subscribe(value => {
      //something that works
    });

使用行为主体

 @Injectable()
    export class MyProvider {
      private myObservable=new BehaviorSubject<any>('');
      CurrentData = this.myObservable.asObservable();
      constructor(private aFs: AngularFirestore) {

      }

     getData(myParam): void { 
       someasynccall.pipe(map(),filter()).
          subscribe(value=>this.myObservable.next(value))


    }

Page.ts

this.myProvider.getData(param);
this.mySubscription = this.myProvider.CurrentData.subscribe(value => {
      //something that works
    });

Subject vs BehaviorSubject

LiveDemo

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

从页面/组件中的服务共享相同的 Observable 的相关文章

随机推荐

  • 单击相同的发布版本但程序集版本不同,更新没有发生

    我部署了一个 clickonce 应用程序 在我的应用程序中我有 10 个外部 dll 由于我的 dll 文件中的代码不断变化并且很难重新分发 因此我采用了 clickonce 部署策略 但我想知道一件事 如果我更改其中一个 dll 文件并
  • printf 在 C 中给我错误的输出

    这可能是一个非常基本的问题 但我在任何地方都找不到答案 这是我在用 C 编程几周后第一次遇到这个问题 本质上 如果我编写一些看起来像这样的代码 int size scanf d size printf size is d size 如果我输
  • 有人可以解释一下 exynos ARM 中的电源控制寄存器吗?

    在Linux内核中 更准确地说 arch arm mach exynos cpuidle c在 3 9 rc6 上 该行显示 static unsigned int g pwr ctrl g diag reg static void sav
  • Google Cloud Vision API 是否检测 OCRed 文本中的格式,例如粗体、斜体、字体名称(helvetica 或 times new roman)等?

    快的brown狐狸跳over懒狗 在这种情况下 假设也有不同的字体系列 云视觉 API 是否可以检测到这一点 或者任何其他 OCR API 都能清楚地检测到这一点 Tesseract 有能力 但它非常不准确 谷歌云视觉 API 是否检测 O
  • 单击通知区域中的消息时未打开应用程序

    我正在开发一个可与推送通知配合使用的 Worklight 应用程序 我目前正在 Android 上进行测试 并已获得适配器来向应用程序发送推送通知 问题是 应用程序仅在前台时接收它 如果它在后台 它不会收到它 并且我在通知区域显示消息后打开
  • C++ 随机 int 函数

    大家好 亲爱的 stackoverflow 会员 我最近开始学习 C 今天我写了一个小游戏 但我的随机函数无法正常工作 当我多次调用随机函数时 它不会重新生成数字 而是一遍又一遍地打印相同的数字 不使用for循环如何解决这个问题 谢谢 in
  • 前缀和后缀运算符有什么区别?

    以下代码打印值 9 为什么 这里return i 将返回值 11 并且由于 i该值本身应该是 10 谁能解释这是如何工作的 include
  • Java 中哈希集作为构造函数参数

    有什么方法可以声明构造函数将 HashSet 作为参数之一 然后在对象初始化期间直接将 HashSet 值作为参数传递 我的意思是这样的 public class Order private Set
  • word 中前一个标题的文本

    给定Word中的任何选定单词或段落 有没有办法使用VBA查找最近的前面标题的文本 例如 标题级别 1 主标题 这是关于该文档的一段 A 2 级标题 副标题 这一段描述了一个细节 B 如果选择 B 的任何部分 我想找到 A Sub Title
  • 为特定用户单独显示和隐藏谷歌表格

    我正在为我的团队成员制作一个谷歌电子表格 他们可以在其中保存他们的日志 所以我为他们每个人制作了一张单独的表格 但由于某些隐私原因 我不想让他们看到彼此的日志 我使用应用程序脚本隐藏工作表 并将它们与用户的电子邮件地址相关联 但是 当任何用
  • 将按钮插入 JFreeChart 图形中

    我使用代码来显示图表 我想在此图中插入一个按钮 显示详细信息 我将使用该按钮来显示有关该图的一些详细信息 它可以实现吗 谢谢 if jCheckBox3 isSelected try con getConnection jdbc mysql
  • 不使用keras后端库的自定义损失函数

    我正在将 ML 模型应用于实验设置以优化驱动信号 驱动信号本身是被优化的东西 但它的质量是间接评估的 它被应用于实验装置以产生不同的信号 我能够通过 python 中的函数运行实验并收集数据 我想设置一个带有自定义损失函数的 ML 模型 该
  • JS 如何在语句块中声明没有词法作用域的变量和函数?

    var a function a a 60 console log 1 a console log 2 a var b b 60 function b console log 3 b console log 4 b 输出是 1 60 2 f
  • Keycloak 提供者和用户存储

    我有一个正在运行的 java ee 应用程序 现在我想将 keycloak 集成为身份验证服务器 我唯一遇到的麻烦是用户存储 我想在我的java应用程序中拥有所有用户数据 现在的问题 如果用户在 keycloak 前端注册 我的 java
  • 如何从内存中删除多个 pandas (python) 数据帧以节省 RAM?

    我在预处理过程中创建了很多数据帧 由于我的 6GB RAM 有限 我想从 RAM 中删除所有不必要的数据帧 以避免在 scikit learn 中运行 GRIDSEARCHCV 时内存不足 1 是否有一个函数可以仅列出当前加载到内存中的所有
  • 在 MATLAB 中叠加两个图像

    我想在matlab中叠加两个相同尺寸的图像 我尝试使用imfuse功能 但我得到的图像与我想要的不一样 第一张图像是对原始图像应用 Canny 边缘检测器后获得的图像的负片 我想将这个带有黑边的负片图像强加到我的原始图像上 有人可以建议一些
  • 使用 selenium 和 python 等待表完全加载

    我想从表中的页面中抓取一些数据 所以我只关心表中的数据 早些时候我使用Mechanize 但我发现有时会丢失一些数据 特别是在表格底部 谷歌搜索 我发现这可能是由于 mechanize 不处理 Jquery Ajax 造成的 所以我今天改用
  • 找不到 swig.exe:尝试安装 pylinkgrammar 0.2.14 时出错

    当我尝试安装 pylinkgrammar 0 2 14 时出现错误 包括 pylinkgrammar setup py 错误的构建轮 命令 swig exe 失败 没有这样的文件或目录 构建 pylinkgrammar 失败 我该如何解决此
  • 如何使用属性文件配置 log4j

    如何让 log4j 获取属性文件 我正在编写一个 Java 桌面应用程序 我想使用 log4j 在我的主要方法中 如果有这个 PropertyConfigurator configure log4j properties 当我打开 Jar
  • 从页面/组件中的服务共享相同的 Observable

    我正在尝试订阅相同的内容Observable多次但不起作用 我有一个提供者可以为我提供Observable from AngularFirestore目的 这是我的提供者 Injectable export class MyProvider