【问题标题】:Angular EventEmitter doesn't seem to workAngular EventEmitter 似乎不起作用
【发布时间】:2020-10-04 16:40:16
【问题描述】:

我有一个主组件,它调用一个子组件,它是一个切换面板,当我激活切换时,它会发出切换的值(真或假)

切换面板.component.ts

@Output() toggleChange = new EventEmitter<boolean>();

  onChange(event: MatSlideToggleChange) {
    this.toggle = event.checked;
    this.toggleChange.emit(this.toggle);
  }

当我以这种方式使用这个组件时:

main.component.html

<app-toggle-panel
        [(toggle)]="toggleValue"
      >
</app-toggle-panel>

效果很好,改变了isToggle的值。

但是当我这样使用它时:

main.component.html

<app-toggle-panel
        (toggle)="onToggleChange($event)"
      >
</app-toggle-panel>

在主组件中使用此功能:

main.component.js

  onToggleChange(event) {
    this.toggleValue = event;
    this.emit();
  }

当我切换开关时,永远不会调用 onToggleChange 函数,我不明白为什么。

问题是当“toggleValue”的值改变时我必须调用函数emit。

我也尝试使用 ngOnChanges 来检测“toggleValue”的变化,但即使在切换面板组件中调用了发出函数,ngOnChanges 也没有检测到变化。

ngOnChanges(changes: SimpleChanges) {
  console.log(changes)
}

我该如何解决这个问题?

【问题讨论】:

  • 这个问题目前还不是很清楚。你能创建一个最小的工作示例(例如使用 Stackblitz)吗?

标签: angular eventemitter angular-event-emitter ngonchanges


【解决方案1】:

您需要提及输出的名称或绑定到发出的变量

选项 1

child.component.ts

@Output('toggle') toggleChange = new EventEmitter<boolean>();

parent.component.html

<app-toggle-panel (toggle)="onToggleChange($event)">

选项 2

child.component.ts

@Output() toggleChange = new EventEmitter<boolean>();

parent.component.html

<app-toggle-panel (toggleChange)="onToggleChange($event)">

【讨论】:

  • 哦,谢谢,我太愚蠢了,我没有绑定好的变量-_-
猜你喜欢
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2019-12-02
  • 2017-01-03
相关资源
最近更新 更多