【问题标题】:How to display alert on app level from a child component如何从子组件显示应用程序级别的警报
【发布时间】:2017-11-22 17:43:11
【问题描述】:

我想有一些规则或建议能够做到这一点:

我有一个应用级别的警报,我想在我的某个组件发生某些事情时显示它(例如:保存信息成功或失败)。

另外,我如何发送我想显示的不同文本?有没有与@ViewChild 等价的东西?

感谢您的帮助

【问题讨论】:

  • 将服务注入子组件。将警报传递给 clild 组件中的服务。使用主题在服务中发出此警报。还要在应用程序组件中注入服务。从应用组件订阅主题,每次收到警报时,显示它。 angular.io/guide/…
  • 我创建了一个示例,说明我是如何使用服务和组件保持简单的。 github.com/angular-in-action/portfolio/tree/master/src/app/…
  • 谢谢杰里米。您的示例对我帮助很大,感谢 JB 提供的 Angular 文档!

标签: angular vmware-clarity


【解决方案1】:

我会用ObservableSubject 来做。基本上你需要在这些组件的共享模块中注入一个service,以便它们共享状态。

应用程序(根)组件将在服务的public observable 上有一个subscription。每个组件都会通过service 调用subject 上的.next() 来设置状态。 observable 将返回 subject. 的值

您可以在这里查看代码:https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service

这个想法很相似。

【讨论】:

  • 在该代码中管理订阅的方式已经过时了。巨大的内存泄漏
  • ngOnDestroy you .unsubscribe (或者在代码中的其他位置,如果最合适的话) - 我忘了提到这一点。这取决于我猜的用例。
  • 不仅如此,在每个函数调用中都有完全不必要的重新订阅。此外,取消订阅不依赖于用例,你总是这样做,否则你会造成内存泄漏,唯一不需要的情况是自终止 observables。
  • 如何从一个组件A通知另一个组件B(没有父子关系)?可以分享一下sn-p吗?
  • 具有共享服务模式,那部分没有错,该代码中的实现是问题,我不会以它为例,角度文档提供了一个合适的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多