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");
  }
}