TypeError:instance [output.propName] .subscribe不是函数

时间:2018-04-18 13:57:03

标签: angular eventemitter emit

我试图从子组件向父组件发出事件。

父:

parent.ts



onChangeUpload(event){
  console.log('event');
  console.log(event);
}

<app-upload (uploadEmit)="onChangeUpload($event)"></app-upload>
&#13;
&#13;
&#13;

子:

&#13;
&#13;
@Output() uploadEmit: EventEmitter = new EventEmitter();

this.uploadEmit.emit('upload successful');
&#13;
&#13;
&#13;

我收到了这个错误:

core.js:1448 ERROR Error: Uncaught (in promise): TypeError: instance[output.propName].subscribe is not a function

&#13;
&#13;
@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;
&#13;
&#13;

3 个答案:

答案 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';