输出事件发射器仅在 ngOnInit 上触发

Posted

技术标签:

【中文标题】输出事件发射器仅在 ngOnInit 上触发【英文标题】:Output Event Emitter triggers only on ngOnInit 【发布时间】:2017-11-07 01:15:20 【问题描述】:

我有父子组件,从子组件需要触发父组件功能。

Parent.component.ts

loadData(event) 
      console.log(event);

Parent.component.html

<app-project (uploaded)="loadData($event)" ></app-project>

child.component.ts

@Output() uploaded:EventEmitter<any> = new EventEmitter();

ngOnInit() 
    this.uploaded.emit('complete'); // Worked 


loadProject()
    this.uploaded.emit('complete'); // Not triggering the parent function 

child.component.html

<button type="button" (click)="loadProject(project)" label="Load Project"></button>

不知道这有什么问题,但从 ngOnInit 开始工作。

从 child.component.html 调用 loadProject。

【问题讨论】:

从哪里调用loadProject() child.component.ts 中有一个函数 (editProject) 从那里调用 editProject(project: Project) this.uploaded.emit('complete'); 也许编辑您的问题是一个更好的主意,因为 cmets 中的代码很难阅读。还请添加调用editProject() 的信息。 我确信someMethod($event) 在这两种情况下都会被调用。 someMethod() ... 长什么样子? 那么问题或疑问是什么? 【参考方案1】:

改变:

child.component.ts

@Output() uploaded = new EventEmitter<string>();

ngOnInit() 
    this.uploaded.emit('complete'); // Worked 


loadProject()
    this.uploaded.emit('complete'); // Not triggering the parent function 

child.component.html

<button type="button" (click)="loadProject()" label="Load Project"></button>

您将字符串值传递给 loadProject,但在子组件中没有定义带有 1 个参数的 loadproject

【讨论】:

以上是关于输出事件发射器仅在 ngOnInit 上触发的主要内容,如果未能解决你的问题,请参考以下文章

如何在离子页面上触发 ngOnInit

订阅仅在首次初始化后返回空数组

iOS:仅在 iOS 13 上不会触发点击事件

仅在页面关闭时触发事件[重复]

我想在 ngOnInit() 的第二个方法中使用 .subscribe 的结果

jQuery 仅在附加了 jQuery 时才会触发 keyup 事件