Angular 关于角度提供者';不带服务的组件事件传输

Angular 关于角度提供者';不带服务的组件事件传输,angular,typescript,Angular,Typescript,我现在创建了4个测试组件,有: 主要成分 页面组件 页面B组件 动作部件 action component.html只有一个按钮elm,他得到了一个点击事件,如下所示: <button (click)="onSubmit()">Submit</button> eventList = []; addEvent(event) { this.eventList = [...this.eventList, event]; } onSubmit() { thi

我现在创建了4个测试组件,有:

  • 主要成分
  • 页面组件
  • 页面B组件
  • 动作部件
  • action component.html只有一个按钮elm,他得到了一个点击事件,如下所示:

    <button (click)="onSubmit()">Submit</button>
    
    eventList = [];
    
    addEvent(event) {
        this.eventList = [...this.eventList, event];
    }
    
    onSubmit() {
        this.eventList[0].handle();
    }
    
    page-A-component.htmlpage-B-component.html如下:

    <p>Page A</p>
    <action></action>
    
    最后,在主要组件中包括它们,没有什么特别之处:

    <page-a></page-a>
    <page-b></page-b>
    
    
    
    模块都有,上面是所有的测试准备,但实际上,action.component的click事件不起作用,我会得到错误消息:无法读取未定义的属性“handle”

    我知道,(click)=“onSubmit()”执行的实体可能不是由page-a、page-B实现的函数,但我应该怎么做? 我不想为此需求创建服务组件。有没有一种不用服务就可以实现的方法


    感谢您的帮助。

    您正在调用的onSubmit()方法中的dude。事件列表[0]。句柄();但是addEvent(event)在之前没有被调用,所以这个.eventList不包含任何东西,这就是为什么会出现这个错误是的,我发现确实是这样。单击并记录eventList时,eventList为空。但是我应该怎么做呢?当您想在提交之前添加事件时,应该调用addEvent(event)方法。好的,我再试一次,谢谢。我不明白你为什么要尝试在angular中注入actionComponent。通常情况下,服务是注入的,而你注入的组件根本没有任何意义。请阅读angular服务流、@input()、@output()指令
    // import
    import { ActionComponent } from '../action/action.component';
    
    // @Component has providers
    providers: [ActionComponent]
    
    // constructor
    constructor( private actionComponent: ActionComponent ){ }
    
    // init and add event
    ngOnInit() {
        this.actionComponent.addEvent( this.tapIt() );
        this.actionComponent.onSubmit(); // this is test, it does work 
      }
    
    // self event
    tapIt() {
        return {
          handle: () => {
            console.log('Page A tap it'); // B is 'Page B tap it'
          }
        };
      }
    
    <page-a></page-a>
    <page-b></page-b>