【发布时间】:2023-04-02 18:47:02
【问题描述】:
在 Angular 2+ 组件中,如何传入带参数的回调函数? 我最初的假设是这样的
<app-example [onComplete]="doThing('someParam')"></app-example>
有时我不需要任何参数,像这样:
<app-example [onComplete]="doSomeThingElse()"></app-example>
然后在我拥有的组件中
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-example',
templateUrl: './example.component.html',
})
export class ExampleComponent {
@Input() public onComplete: () => void;
//run `this.onComplete()` somewhere as needed
}
但是,最终发生的事情是 doThing('someParam') 或 doSomeThingElse() 在没有任何交互的情况下立即被调用。
我应该如何将回调函数传递给稍后调用的组件?
编辑:
我在这里试图解决的实际问题是能够在以后运行任何传入的函数。这是一个确认组件,它将询问用户“您确定要继续吗?”然后如果他们按下“是的,我确定”按钮,传入的函数就会运行。
【问题讨论】:
-
@yurzui 这不是用事件重新发明轮子,并且有内存泄漏的潜在危险吗? (不是你的解决方案,而是意图本身)
-
@deezg
bind方法将在每次角度调用更改检测周期时返回新函数。所以我同意我们不应该重新发明轮子) -
你应该阅读@Output。这就是你要找的。span>
-
@toskv 我知道
@Output将值传递回父控制器,但我不确定在这种情况下如何使用它。随意添加详细信息对此问题的答案,我会将其标记为正确。现在告诉我“阅读”某些东西对我没有多大帮助。 -
@ChrisBarr 您最好实际描述您要解决的问题。问题不是“将回调函数作为变量传递”,而是您希望组件解决的真正问题。通常的解决方案是将参数作为
@Input参数发送给孩子,然后将事件与@Output绑定,并且将使用您想要的任何参数引发事件。当事件被引发时,你的父组件将使用它通过事件获得的任何参数调用它想要的任何函数(在上面的情况下是你的回调)。
标签: angular typescript angular5