【问题标题】:emitted value from an event can not be received无法接收事件发出的值
【发布时间】:2021-04-12 09:28:29
【问题描述】:

distance-measurment-parameters.component 是 site-map.component 中的一个子项。 distance-measurment-parameters 中的 hideWindowOverlay() 方法在窗口关闭时调用,并发出如下所示的事件。日志 显示 hideWindowOverlay() 中的语句,表示该事件已发出。

在组件site-map.component中,我监听或订阅事件'evtEmitterOnDistanceMeasurementWindowClosed'如下,如下代码所示

(evtEmitterOnDistanceMeasurementWindowClosed)=onDistanceMeasurementWindowClosedEvtReceived($event)/>

问题是,方法 onDistanceMeasurementWindowClosedEvtReceived() 从未被调用,因此没有收到事件。

请告诉我如何正确订阅“evtEmitterOnDistanceMeasurementWindowClosed”事件以及如何调用“onDistanceMeasurementWindowClosedEvtReceived”方法

在 site-map.html 中

<clr-toggle-wrapper *ngIf="showMeasureDistance">
<input type="checkbox" clrCheckbox  (change)="toggleDistanceMeasurementOverlay()"  [(checked)]="showMeasureDistanceOverlay"
(evtEmitterOnDistanceMeasurementWindowClosed)=onDistanceMeasurementWindowClosedEvtReceived($event)/>
<label >
    {{ "SITE.MEASURE_DISTANCE" | translate }} 
    <button class="btn btn-sm btn-icon" (click)="showInformation('SERVICE_MEASURE_DISTANCE')">
        <clr-icon shape="help-info" class="is-solid"></clr-icon>
    </button>

</label>
</clr-toggle-wrapper>

distance-measurment-parameters.component

//declaration of the event emitter
@Output("evtEmitterOnDistanceMeasurementWindowClosed")
evtEmitterOnDistanceMeasurementWindowClosed: EventEmitter<boolean> = new 
EventEmitter<boolean>();

hideWindowOverlay() {
//throw new Error('Method not implemented.');
this.showWindow = false;
this.evtEmitterOnDistanceMeasurementWindowClosed.emit(true);
console.log("hideWindowOverlay: emits event this.evtEmitterOnDistanceMeasurementWindowClosed.emit(true)");//log here are displayed
}

在 site-map.component 中

onDistanceMeasurementWindowClosedEvtReceived(event: boolean){
    this.toggleDistanceMeasurementOverlay();  
    console.log("onDistanceMeasurementWindowClosedEvtReceived: ");//log are not displayed

}

【问题讨论】:

  • 你声明evtEmitterOnDistanceMeasurementWindowClosed=new EventEmitter&lt;bool&gt;();了吗? - 看到你需要等于 new EventEmitter-
  • 这里不应该有双引号吗? (evtEmitterOnDistanceMeasurementWindowClosed)=onDistanceMeasurementWindowClosedEvtReceived($event)/&gt; 还是可以编译?

标签: javascript angular typescript angular-event-emitter


【解决方案1】:

正如我所见,您正在尝试从 input 元素中侦听 evtEmitterOnDistanceMeasurementWindowClosed 事件,但 input 没有这样的事件发射器。尝试在某些内置输入事件上调用 onDistanceMeasurementWindowClosedEvtReceived 方法 - 例如 onchange

或者像这样使用[(ngModel)]

<input [(ngModel)]="value"
        (ngModelChange)="onDistanceMeasurementWindowClosedEvtReceived($event)"
      />

【讨论】:

  • 请告诉我为什么您认为它应该是输入而不是输出?我也尝试了您发布的答案,但收到了相同的结果
  • 我说的是没有 evtEmitterOnDistanceMeasurementWindowClosed 输出/事件发射器的 html 元素。要使用 [(ngModel)] 你必须导入 FormsModule
猜你喜欢
  • 2018-12-18
  • 2021-02-14
  • 1970-01-01
  • 2017-07-02
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2018-04-27
相关资源
最近更新 更多