Angular 4 在共享服务中发出并订阅事件

2024-03-21

我在我的主要组件中发出一个事件:

主要组件.ts

this.sharedService.cartData.emit(this.data);

这是我的sharedService.ts

import { Component, Injectable, EventEmitter } from '@angular/core';
export class SharedService {
    cartData = new EventEmitter<any>();
} 

在我的其他(子)组件中,我想访问该值,但不知何故,订阅不起作用:

仪表板.ts

private myData: any;

constructor(private sharedService: SharedService) {
    this.sharedService.cartData.subscribe(
        (data: any) => myData = data,
        error => this.errorGettingData = <any>error,
        () => this.aggregateData(this.myData));
}

我错过了什么吗?当我将数据作为可注入对象传递时,它工作得很好。 在一些 REST 调用之后会发出事件(在主组件中)。

Update

所以问题是子组件是在事件第一次发出后创建的。我想在这种情况下最好将数据注入subcompnent直接地。


Update:Plunker 示例不再维护,请使用 StackBlitz 例子在这里https://stackblitz.com/edit/stackoverflow-questions-45351598-angular?file=src%2Fapp%2Fapp.component.ts https://stackblitz.com/edit/stackoverflow-questions-45351598-angular?file=src%2Fapp%2Fapp.component.ts

我使用您上面提供的代码创建了一个工作的 plunker 示例。https://plnkr.co/edit/LS1uqB?p=preview https://plnkr.co/edit/LS1uqB?p=preview

import { Component, NgModule, Injectable, EventEmitter, AfterViewInit } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';


@Injectable()
export class SharedService {
    cartData = new EventEmitter<any>();
} 

@Component({
  selector: 'app-app',
  template: `
    <h1>
      Main Component <button (click)="onEvent()">onEvent</button>
    </h1>
    <p>
      <app-dashboard></app-dashboard>
    </p>
  `,
})
export class App implements AfterViewInit {
  data: any = "Shared Data";

  constructor(private sharedService: SharedService) {
  }

  ngAfterViewInit() {
    this.sharedService.cartData.emit("ngAfterViewInit: " + this.data);
  }

  onEvent() {
    this.sharedService.cartData.emit("onEvent: " + this.data);
  }
}

@Component({
  selector: 'app-dashboard',
  template: `
    <h2>
      Dashboard component
    </h2>
    <p>
      {{myData}}
    </p>
  `,
})
export class AppDashboard implements AfterViewInit {
  myData: any;

  constructor(private sharedService: SharedService) {
          this.sharedService.cartData.subscribe(
          (data: any) => {
            console.log(data);
            this.myData = data;
          });
  }

}


@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App, AppDashboard ],
  providers: [ SharedService ],
  bootstrap: [ App ]
})
export class AppModule {}

在此处查看生命周期挂钩https://angular.io/guide/lifecycle-hooks https://angular.io/guide/lifecycle-hooks

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

Angular 4 在共享服务中发出并订阅事件 的相关文章

随机推荐

  • 将属性从 CAS 释放到 Spring security

    我在客户端使用 Spring security 3 X 在服务器上使用 CAS 4 0 当我进行 CAS Spring 安全集成时 我能够达到票证验证成功的水平 并能够在客户端获得适当的角色 但我在 casServiceValidation
  • 如何使用 QPainterPath 裁剪图像而不保存图像的其余部分

    我有一个 QPainterPath 我想裁剪一个 QPixmap 图像 这段代码对我有用 但我想使用 PyQt5 内置功能 就像没有 numpy 的 mask read image as RGB and add alpha transpar
  • 如何仅将 font-face 应用于特定范围的 Unicode 字符

    从数据库查询的字符串如下所示 123 Street National Road 3 我用的是字体font family Battambang cursive 使用该字体的 ASCII 字符看起来不错 但字符串中的其他字符看起来有点麻烦 在浏
  • 如何将字符串设置为全部小写[重复]

    这个问题在这里已经有答案了 我有一个char foo SIZE string 并使用正确输入 s 如其中printfs正确的输入 但现在想将其设置为小写 所以我尝试使用 if isupper foo foo tolower foo 即当我这
  • 如何在悬停时有条件地将 css 应用到 mat-row 元素?

    我有一个包含行的表格 当满足特定条件 对于每行 时 背景颜色为浅红色 对于每一行 在悬停时 我将背景更改为浅灰色 问题是 我希望特殊行 那些已经获得浅红色的行 在悬停时用更深的红色着色 而不是像所有其他行一样为灰色 我能得到的最好结果是让红
  • 加载两个自定义库

    我在使用 Composer 从另一个自定义库加载自定义库时遇到一些问题 我有 2 个名为 ia audit trail 和 ia flash 的自定义库 并且 ia audit trail 需要 ia flash 才能工作 审计跟踪 htt
  • ASP.NET MVC 的动态 CSS?

    看起来 NET 社区总体上还没有关注 CSS 编译器 在谷歌搜索中 我没有找到任何相关的东西 使用 ASP NET MVC 的人是否找到了更智能地生成 CSS 的方案 例如 我希望能够通过 Razor 运行我的 CSS 或者将 SASS 移
  • PhpStorm:获取“与其类同名的方法不会是构造函数”的代码检查警告

    好吧 我终于切换到 PHP7 了 我的代码有点旧 将被翻新 一些问题是 class MagicClass function MagicClass etc 这会在执行期间发出弃用警告 已弃用 与其类同名的方法将不会被弃用 PHP 未来版本中的
  • htaccess 强制使用 SSL,RSS 提要除外

    我的网站目前在所有地方都强制使用 SSL 这就是我想要的方式 只是它会导致我的 RSS 驱动新闻通讯和 feedburner 出现问题 因此 我需要对我的提要进行例外处理 有人可以帮助制定正确的 htaccess 规则来实现这一目标吗 我的
  • WebSocket WS SSL

    我正在使用 Google App Engine 托管虚拟机来开发使用 Web 套接字的 NodeJS 应用程序 作为应用程序的一部分 前端需要使用Websockets进行连接 例如 connection new WebSocket wss
  • Jackson 通过字段进行多态反序列化

    比方说 我有一堂课 public class A private UUID typeId private B data public abstract class B private String a public class BChild
  • 向数据帧的日期时间索引中的每个索引添加随机微秒数

    我有一个使用日期时间索引的数据框 由于数据的性质 原始数据中存在重复的行 从而产生重复的索引 我想向每个索引添加随机的微秒数 以使它们唯一 所以 我的索引目前是 2021 06 01 08 58 47 00 00 我希望它是 2021 06
  • java的String.matches方法的正则表达式?

    基本上我的问题是这样的 为什么是 String word unauthenticated word matches a z 返回假 用java1 6开发 基本上我想看看传递给我的字符串中是否包含字母字符 The String matches
  • 当用户单击后退按钮时让 DataTables 保持其状态(没有 stateSave 选项)

    我在 Chrome 和 Edge 中遇到的问题 Go to https datatables net examples basic init zero configuration html https datatables net exam
  • Numpy 总是将邻居获取为 3x3 矩阵

    假设我有一个大小为 5 5 的 2d numpy 数组 我可以使用以下语句获取索引 i j 的邻居 a range 25 a np reshape a 5 5 n a i 1 i 2 j 1 j 2 这非常适合0 lt i j lt 4 我
  • 是否可以在 int 变量中存储浮点值

    我想将浮点值存储在整数变量中并打印该整数变量 并且我想查看浮点值本身 到底能不能做 如果您想查看您的位模式float变量你可以这样做 include
  • 更新 e4 应用程序模型中处理程序开关的 UI 贡献

    I have defined a command global to my e4 application namely the add command So as you can see in the command is to used
  • ASP.NET Web.Api 插件架构

    您能给我推荐一些有关 Web api 中插件架构的文章或代码示例吗 目前我正在考虑这种情况 拥有 1 个集中式 api 网关 每个客户端都发送请求 并在 Plugins 文件夹中拥有不同的应用程序控制器 如果有人想添加新服务 请编写自己的控
  • 当我们的表不需要主键时? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们会设计一个不需要主键的表吗 No 主键在幕后做了很多事情 即使您的应用程序从不使用它 例如 聚类 http blogs oracle com
  • Angular 4 在共享服务中发出并订阅事件

    我在我的主要组件中发出一个事件 主要组件 ts this sharedService cartData emit this data 这是我的sharedService ts import Component Injectable Even