angular - Angular 2 - 将布尔值“true”从一个组件传递到另一个组件(不是兄弟姐妹)
问题描述
在一个组件上,我有一个触发功能的按钮:
<button (click)="open Popup(); hideButton()"></button>
我有,可以说:buttonService
我应该用于这两个组件之间的连接。
在第二个组件(与第一个组件无关的父子组件)中,我有多个这样的按钮:
<button class="element1"></button>
<button [class.hiddenClass]="hideButt" class="element2"></button>
<button class="element3"></button>
第二个组件是从第一个组件单击相同按钮时打开的弹出窗口,此时它还应该触发hideButton()
函数将布尔值“true”传递给hideButt
第二个(弹出)组件并隐藏按钮。我该怎么做?订阅、Observable、EventEmitter?
解决方案
您可能会发现 rxjs 主题很有用。它非常适合与服务进行跨组件通信。在您的服务类中添加一个属性,
公共按钮Click = new Subject()
然后在您要从中发送数据的组件中,联系服务并在其上调用 next()
This.myservice.buttonClick.next (true)
然后您可以从任何其他组件订阅您的主题
This.myservice.buttonClick.subscribe(数据 => 数据)
每当您下次调用时,任何订阅都会从任何组件接收您的新数据。
此外,behavioursubject 是将发出初始值的主题
希望这可以帮助!
推荐阅读
- c - 打印二叉树
- java - 面向对象设计 - 如何将一个类嵌套到另一个类中
- java - springboot中bean的新版本/副本
- python - 用变量和数据库数据填充 Django 模板?
- javascript - 通过单击并使用固定标题水平和垂直拖动来滚动表格
- sql - 聚合中的最大值(sql)
- python - Python - if 语句中的变量范围 - 为什么以下代码有效?
- php - 从 $data['id']; 赋值
- google-cloud-platform - 我们可以安排 StackDriver Logging 来导出日志吗?
- javascript - 如何将两个或多个包含多个对象的数组合并为一个并增加它们的 ID?