【问题标题】:How to call an event in parent component from child component?如何从子组件调用父组件中的事件?
【发布时间】:2016-02-01 10:06:07
【问题描述】:

我已经实现了选项卡,其中我在 tab1 中有一个表单和一个按钮。我在父组件中有一个事件,它使当前选项卡处于非活动状态而下一个选项卡处于活动状态。如何从子组件调用父组件中的事件?

  gotosecondtab(){
this.firsttabactive=false;
this.secondtabactive=true;
}

这是父组件中的事件...我想从子组件运行此事件

onSubmit(): void {  
console.log('you submitted value: ', this.myForm.value); 
//How to call the parent event here
}

我想在执行 onSubmit() 事件时运行 gotosecondtab() 事件...请有人帮助我

【问题讨论】:

    标签: typescript angular


    【解决方案1】:

    您可以在子组件中创建自定义事件

    @Component({
      selector: 'child',
      (...)
    })
    export class ChildComponent {
      @Output() myevent: EventEmitter;
    
      constructor() {
        this.myevent = new EventEmitter();
      }
    
      onSubmit(): void {  
        console.log('you submitted value: ', this.myForm.value); 
        this.myevent.emit();
      }
    }
    

    并从父组件注册:

    @Component({
      template: `
        <child (myevent)="gotosecondtab()"></child>
      `,
       directives: [ ChildComponent ]
      (...)
    })
    export class ParentComponent {
      (...)
    
      gotosecondtab() {
      }
    }
    

    希望对你有帮助, 蒂埃里

    【讨论】:

    • 在我的项目中,我必须在模板中为回调函数添加一个 $event 参数 --> (myevent)="gotosecondtab($event)
    • 是的,如果您想为触发的事件提供一个值,则同意(使用值作为参数调用emit)。我没有看到 gotosecondtab 方法的任何参数。这就是为什么我没有使用$event ;-)
    • 我不想发送任何参数,所以不需要 $event...谢谢 Thierry Templier
    • @Pankaj 谢谢! EventEmitter 的 next 方法已被弃用,它的作用与 emit 方法相同(请参阅github.com/angular/angular/blob/master/modules/angular2/src/…)。该方法遵循 RxJS 的 API,我认为 Angular2 想提供自己的...
    • @Pankaj 我正在写一个答案;-) 如果它是父/子组件,您可以在父组件中注入子组件并使用他们的方法(请参阅stackoverflow.com/questions/35100684/…)。更一般地,您需要利用包含 EventEmitter 作为属性的共享服务(在定义其关联提供者时要小心)。组件可以在其上注册并从中发出...
    猜你喜欢
    • 2019-11-11
    • 2019-06-23
    • 2022-12-22
    • 2016-05-12
    • 2016-12-08
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多