我试图从子组件向父组件发出事件。
父:
parent.ts
onChangeUpload(event){
console.log('event');
console.log(event);
}

<app-upload (uploadEmit)="onChangeUpload($event)"></app-upload>
&#13;
子:
@Output() uploadEmit: EventEmitter = new EventEmitter();
this.uploadEmit.emit('upload successful');
&#13;
我收到了这个错误:
core.js:1448 ERROR Error: Uncaught (in promise): TypeError: instance[output.propName].subscribe is not a function
@angular/cli: 1.7.3
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.6.2
webpack: 3.11.0
&#13;
答案 0 :(得分:17)
import { EventEmitter } from 'events';
这是您的导入声明吗?
如果是,请将其更改为
import { EventEmitter } from '@angular/core';
并禁用VS Code自动导入。 :)
答案 1 :(得分:1)
我认为你没有提到Type,当我们发送关于事件发射的数据时,我们必须明确指定我们将要发送的数据类型:
子组件:
<h3> Child Component </h3>
<button (click)="onSendData()">Send Data</button>
儿童打字稿:
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'hello',
templateUrl: './hello.component.html',
styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent {
@Input() name: string;
@Output() passData = new EventEmitter<string>();
onSendData(){
this.passData.emit("Hello From Child");
}
}
您可以查看工作示例here。
答案 2 :(得分:0)
当我想从孩子向父母发射时,我有同样的问题。但是,由于VS Code的自动导入,它是从事件而不是角度/核心导入的。首先,在VS Code中禁用自动导入。
然后,如果您的导入是这样的
import { EventEmitter } from 'events';
更改为
import { EventEmitter } from '@angular/core';