我想知道,例如,你是否有一个像这样的Angular 分量

@Component({
    selector: 'app-child',
    ...
})
export class ChildComponent implements OnInit {
    @Output() previous = new EventEmitter<void>();

    ngOnInit() {
       // Detect if parent is listening for `previous` events
    }
}

我可以检测到以下两个用例之间的差异(在子组件内部):

<app-child (previous)="onPrevious"></app-child>

<app-child></app-child>

我想要实现的是,我想确定是否应该显示一个previous按钮.如果没人在听,我可以藏起来.如果这是不可能的,我当然可以加一个@Input() showPreviousButton.

推荐答案

由于EventEmitter扩展了RxJS的Subject,因此,我认为您可以使用Subject.observed只读属性来判断父级是否订阅了它.

ngOnInit() {
  // Detect if parent is listening for `previous` events
  if (this.previous.observed) {
    // The parent is listening for `previous` events
  }
}

Angular相关问答推荐

为什么这个拦截器只在发送事件上触发,而不是在实际响应上触发?

尾风手风琴中的Ngor

CDK虚拟滚动由于组件具有注入属性而在滚动时看到错误的值

Sass-Loader中出现分号错误:ANGLE应用程序的缩进语法中不允许使用分号

ANGLING:ExpressionChangedAfterChecked在嵌套形式中由子项添加验证器

Angular 17+独立配置中main.ts bootstrap 调用的最佳实践

Angular 显示来自文字数组的SVG路径

当包含react 性模板绑定时,NG-Bootstrap手风琴不会打开

VS代码中带Angular 17的缩进新控制流

我需要取消订阅路由的可观察事件吗

SignalR:协商有效,但消息未发送(.NET/Angular)

Angular 升级后 RXJS SwitchMap 无法与解析器一起正常工作

Angular 在关闭另一个对话框后打开另一个对话框的最佳做法是什么?

使用 RxJS forkJoin 时传递参数的最佳方式

如何在插值中编写条件?

Angular 5 Mat-grid 列表响应式

无法绑定到matDatepicker,因为它不是 input的已知属性

如何使用 Bootstrap 4 flexbox 填充可用内容?

ConnectionBackend 没有提供程序

测试一个包含 setTimeout() 的函数