Angular 如何从ng2子模块中的组件输出()事件?
我有两个具有非常简单的输出事件和处理程序的组件,试图将值从子模块传递到我的Angular 如何从ng2子模块中的组件输出()事件?,angular,typescript,angular2-directives,Angular,Typescript,Angular2 Directives,我有两个具有非常简单的输出事件和处理程序的组件,试图将值从子模块传递到我的app.module中的组件。这是我的app.component.ts @Component({ selector: 'my-app', template: ` <sidebar *ngIf="showHeader" (everySecond)="everySecond()" ></sidebar> <navbar *ngIf="showHeader" (toggleNav)=
app.module
中的组件。这是我的app.component.ts
@Component({
selector: 'my-app',
template: `
<sidebar *ngIf="showHeader" (everySecond)="everySecond()" ></sidebar>
<navbar *ngIf="showHeader" (toggleNav)="toggleNav($event)"></navbar>
<router-outlet></router-outlet>`,
directives: [homeComponent, sidebarComponent, navbarComponent]
})
export class AppComponent {
everySecond() { console.log('second'); }
}
但是,当我转到
tutorialComponent
时,会打印出“here2”日志,但不会触发“第二个”日志。我认为这是因为tutorialComponent没有声明为app.component的指令(因为它是作为模块导入的)。如何使其工作?您需要在应用程序组件中每秒钟订阅:
例如:
this.tutorialComponent.everySecond.subscribe((data) => {
console.log('second');
});
如果在构造函数中发出事件,则尚未设置数据绑定,并且潜在的接收者不会注意到该事件。
如果将代码移动到ngOnInit()
,则在组件初始化并设置数据绑定后将发出事件
export class tutorialComponent {
@Output() everySecond = new EventEmitter();
ngOnInit() {
this.everySecond.emit("event");
console.log("here");
}
}
您是否尝试将“this.everySecond.emit(“event”)”放在ngOnInit方法中?this.tutorialComponent
从何而来?当前在我的组件中没有对它的引用,只有在模块导入中。恐怕即使这样,我也会将“here”打印到控制台,但没有“second”“…似乎在这个简化的plunk中起作用。问题(在您的plunk中没有复制)与使用子模块而不是另一个子组件有关。EventEmitter仅适用于直接子组件,并且仅适用于统计添加的组件和指令。路由器添加的组件不能以这种方式发出事件。在这里,您需要一个共享服务和可观察性。
export class tutorialComponent {
@Output() everySecond = new EventEmitter();
ngOnInit() {
this.everySecond.emit("event");
console.log("here");
}
}