角度服务中的 EventEmitter 是好是坏?

2023-11-23

我正在使用EventEmitter and @Output在 Angular 服务中,今天一位同事提到这不是一个好的做法。

我找到了这个post提到这是一种不好的做法,似乎主要是个人观点,而这answer提到可以使用它。 我找不到任何关于它的官方文件,所以如果有人知道官方答案,请发布。

官方文档关于事件发射器


我在 Angular 服务中使用 EventEmitter 和 @Output,今天一位同事提到这不是一个好的做法。

注释@Output()对服务没有影响。它用于告诉 Angular 模板编译器绑定一个Observable到模板表达式。

如果我看到@Output()在服务中,然后我会告诉开发人员将其删除。

EventEmitter is an Observable在服务中使用它没有副作用,但也没有好处。

您可以使用任何Observable组件或服务中的发射器类型。我们有两个原因EventEmitter。 1) 它早于 Angular 团队决定使用可观察量,他们认为可能需要自己的实现,2) 它可以在下一个 JavaScript 周期中发出值(可选设置)。

在某些边缘情况下,人们需要在下一个周期中发出更改,以避免更改检测出现问题。

保护您的可观察数据

 @Injectable()
 export class MyService {
       public events: Subject<any> = new Subject();
 }

上述服务的问题是任何人都可以从公众那里发出值events。您希望您的服务成为处理发出值的唯一代码。

 @Injectable()
 export class MyService {
       private _events: Subject<any> = new Subject();
       public get events(): Observable<any> {
           return this._event.asObservable();
       }
 }

上面的方法更好,因为可以访问Subject.next(..)是私人的。消费者只能订阅可观察的内容。

如果您遵循成分方法。它迫使你暴露你的发射器,这不是一个好主意。

@Injectable()
export class MyService {
       @Output()   // <<< has no effect
       public events: EventEmitter<any> = new EventEmitter();
       // ^^ makes the emitter public
}

组件需要具有如下属性public如果它们要在模板中使用,但服务则不然。

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

角度服务中的 EventEmitter 是好是坏? 的相关文章

随机推荐

  • Android 只允许一次在屏幕上显示一个导航页面,使用

    下面2个实现有什么区别 public App The root page of your application MainPage new Views MainPage public App MainPage new NavigationP
  • 甜甜圈缓存是否可以与 ASP.NET MVC 一起正常工作?

    通过甜甜圈缓存 我指的是斯科特 格思里的博客文章这太棒了 有谁知道这是否正常 请注意 从 MVC 2 0 开始 此技术不再有效 这很糟糕
  • Sql HierarchyId 如何获取最后的后代?

    Using t sql 等级制度我如何获得所有没有子项的行 即最后的后代 假设我的表结构如下 Id Name HierarchyId 并且有这些行 1 Craig 2 Steve 1 3 John 1 1 4 Sam 2 5 Matt 2
  • 如何在 woocommerce 中添加自定义运费?

    我想使用 woocommerce 中的代码添加运费 这是我的要求 如果我的发货国家 地区是澳大利亚 则运费会有所不同 澳大利亚境外的运费也会有所不同 现在 如果我的发货国家 地区是澳大利亚并且 1 if order value is lt
  • Dynamic_cast 返回 NULL 但它不应该返回

    我有以下类层次结构 class IStorage Q DECLARE INTERFACE IStorage ch gorrion smssender IStorage 1 0 class ISQLiteStorage public ISto
  • 如何在Xcode中替换模板标题中的公司名称?

    当 Xcode 创建一个新文件时 文件头中总是有这样的内容 Copyright 2009 MyCompanyName All rights reserved 我怎样才能改变这一点 You can change it in Xcode pro
  • 如何在 sql 中使用的 linq 中使用 Left join?

    如何在编写 SQL 查询的 Linq 中使用 Left join select p Name p Family E EmployTypecode E employtypeName E EmplytyppeTye from personnel
  • 设置连续数字的格式

    我正在尝试使用 Python 格式化整数列表 但在实现我想要的效果时遇到了一些困难 输入是整数的排序列表 list 1 2 3 6 8 9 我希望输出是一个如下所示的字符串 outputString 1 3 6 8 9 到目前为止 我所实现
  • Class.forName 似乎仍然有必要

    来自Java 文档 在以前版本的 JDBC 中 要获取连接 您首先必须通过调用 Class forName 方法来初始化 JDBC 驱动程序 在类路径中找到的任何 JDBC 4 0 驱动程序都会自动加载 但是 您必须使用 Class for
  • 在 JavaScript(特别是 NativeScript)中添加全局变量/函数

    我正在学习如何使用 NativeScript 编写应用程序 我相信最好的学习方式就是实践 因此 我正在构建一个基本的应用程序 在此应用程序中 我尝试创建一个可以跨应用程序中的所有视图模型和其他代码访问的函数和变量 为了尝试做到这一点 我想我
  • 在 Mongoose 的 forEach 循环中添加属性

    假设我的 posts 数组中的每个帖子都有两个属性 name 和 number 所以它就像 var posts name hey number 1 name foo number 2 Javascript 允许我在 foreach 循环中更
  • 网络 - 绑定到本地主机

    我有一个关于绑定和连接的一般性问题localhost 我正在使用 TCP 客户端 服务器 在服务器端我执行以下形式的操作 bind localhost 9999 listen 这是在一个名称为例如 的 UNIX 主机上完成的 host1 现
  • 为什么 sp_columns 不返回结果?

    我试图为 StackOverflow 上的另一篇文章 描述 一个表 但是当我运行 sp columns 时 没有显示任何结果或行 sp columns assignee Results A bunch of column headers 我
  • Python - 根据总和对列表进行排序

    我想根据每个内部列表的总和对包含列表的列表进行排序 这是我当前的片段 vectors for i in range 0 10 vectors append generate vector generate vector works crea
  • 当您需要存储(非常)大的数字时该怎么办?

    我正在尝试做一个欧拉计划问题 但它涉及将一个非常大的数字相加 100 使用Java int和long太小了 感谢您的任何建议 Class 大整数看起来这可能就是您正在寻找的
  • 根据 Javascript 中的字符串输入生成唯一编号

    过去我制作了一个函数 可以从字符串生成唯一的 id 数字 今天我发现它并不像应有的那么独特 以前从未见过问题 如今 两个不同的输入会生成相同的 id 数字 我在 Delphi C PHP 和 Javascript 中使用相同的技术来生成相同
  • 突出显示 JTable 的列标题

    我目前正在构建一个小 JTable 并且希望在选择单元格时突出显示列标题 和行标题 行标题部分实际上正在工作 以便更轻松地找到与该单元格相关的名称 这是一张图片 我已经尝试用以下方法切换标题的渲染器 table getTableHeader
  • 在 Prolog 中对大列表进行排序:内存不足

    我正在尝试使用冒泡排序对 prolog 中的 10k 元素列表进行排序 但出现了本地堆栈错误 合并排序似乎是最好的选择 因为对于相同的输入我没有收到任何错误 然而 我真的很想获得一些具有大量输入数据的冒泡排序的运行时间 但我不能 有任何想法
  • Node-MySQL - Query() 方法中的转义与 Mysql.Escape() / Mysql.EscapeId()

    我目前正在使用节点mysql用于将我的应用程序连接到 MySQL 实例的库 在阅读了我发现的其他一些 StackOverflow 问题和文章后 听起来 node mysql 每次都会自动转义不安全字符query 方法被调用 但在一些代码片段
  • 角度服务中的 EventEmitter 是好是坏?

    我正在使用EventEmitter and Output在 Angular 服务中 今天一位同事提到这不是一个好的做法 我找到了这个post提到这是一种不好的做法 似乎主要是个人观点 而这answer提到可以使用它 我找不到任何关于它的官方