子组件 EventEmitter 不工作
child component EventEmitter not working
我有 CreateProjectComponent,它是子组件 我需要在单击 closeModal 时在父组件中关闭 div
模板(html):
<div (click)="closeModal(true)"></div>
component.ts
@Component({
moduleId: module.id,
selector: "th-create-project",
templateUrl: "create-project.component.html",
styleUrls: ["create-project.scss"],
directives: [
ThAutocomplete,
MD_CARD_DIRECTIVES,
MD_BUTTON_DIRECTIVES,
],
})
export class CreateProjectComponent {
@Output() onVoted = new EventEmitter<boolean>();
public closeModal(agreed: boolean) {
console.log("vote() on CHILD")
this.onVoted.emit(true);
}
}
父组件
在父组件模板中我有:
<div *ngIf="(isNewProjectVisible === true)" (onVoted)="receivedEvent()">
在父组件中我有:
@Component({
selector: "projects-component",
templateUrl: `client/+projects/projects.component.html`,
styleUrls: ["client/+projects/projects.scss"],
directives: [ProjectListComponent, SelectListComponent, CreateProjectComponent],
providers: [ProjectService, StateService, CreateProjectService],
})
export class ProjectsComponent extends MeteorComponent implements OnInit {
public receivedEvent() { //This method isn't being triggered!!!
this.isNewProjectVisible = false;
console.log("receivedEvent() on PARENT")
}
而不是div
,您需要指定要使用的组件的选择器:
<th-create-project *ngIf="isNewProjectVisible" (onVoted)="receivedEvent()">
</th-create-project>
请注意,如果您使用 div
,Angular 将不会自动实例化 CreateProjectComponent 的实例,只是因为您正在使用它的输出属性之一——即,只是因为 (onVoted)
是在父模板中。 Angular 也不会自动实例化 CreateProjectComponent 的实例,因为它列在 directives
数组中。您必须使用选择器在您的模板中指定它,如上所示,以便获得一个实例。
我有 CreateProjectComponent,它是子组件 我需要在单击 closeModal 时在父组件中关闭 div
模板(html):
<div (click)="closeModal(true)"></div>
component.ts
@Component({
moduleId: module.id,
selector: "th-create-project",
templateUrl: "create-project.component.html",
styleUrls: ["create-project.scss"],
directives: [
ThAutocomplete,
MD_CARD_DIRECTIVES,
MD_BUTTON_DIRECTIVES,
],
})
export class CreateProjectComponent {
@Output() onVoted = new EventEmitter<boolean>();
public closeModal(agreed: boolean) {
console.log("vote() on CHILD")
this.onVoted.emit(true);
}
}
父组件
在父组件模板中我有:
<div *ngIf="(isNewProjectVisible === true)" (onVoted)="receivedEvent()">
在父组件中我有:
@Component({
selector: "projects-component",
templateUrl: `client/+projects/projects.component.html`,
styleUrls: ["client/+projects/projects.scss"],
directives: [ProjectListComponent, SelectListComponent, CreateProjectComponent],
providers: [ProjectService, StateService, CreateProjectService],
})
export class ProjectsComponent extends MeteorComponent implements OnInit {
public receivedEvent() { //This method isn't being triggered!!!
this.isNewProjectVisible = false;
console.log("receivedEvent() on PARENT")
}
而不是div
,您需要指定要使用的组件的选择器:
<th-create-project *ngIf="isNewProjectVisible" (onVoted)="receivedEvent()">
</th-create-project>
请注意,如果您使用 div
,Angular 将不会自动实例化 CreateProjectComponent 的实例,只是因为您正在使用它的输出属性之一——即,只是因为 (onVoted)
是在父模板中。 Angular 也不会自动实例化 CreateProjectComponent 的实例,因为它列在 directives
数组中。您必须使用选择器在您的模板中指定它,如上所示,以便获得一个实例。