Angular 关于角度提供者';不带服务的组件事件传输
我现在创建了4个测试组件,有: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
<button (click)="onSubmit()">Submit</button>
eventList = [];
addEvent(event) {
this.eventList = [...this.eventList, event];
}
onSubmit() {
this.eventList[0].handle();
}
和page-A-component.html、page-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>