Angular2 - 提供的参数与调用目标的任何签名都不匹配

时间:2017-03-30 08:39:45

标签: angular angular2-aot

import { Component, Input, OnChanges } from '@angular/core';

@Component({
  selector: 'image-display',
  templateUrl: './image-display.component.html'
})
export class ImageDisplayComponent implements OnChanges {
  @Input() image: File;
  @Input() imagePath?: string;

  private fileReader: FileReader;

  constructor() { }

  ngOnChanges() {
    if (this.image && this.fileReader) {
      this.fileReader.readAsDataURL(this.image);
    }
  }
}

使用AOT进行编译时得到以下错误:

PRINHYLTPAP0592:matata ajays$ ng build --prod --aot
/myApp/src/$$_gendir/app/image-uploader/image-display/image-display.component.ngfactory.ts (61,9): 
Supplied parameters do not match any signature of call target.

3 个答案:

答案 0 :(得分:21)

AOT强制您为每个方法调用通知每个必需参数。

在您的示例中,方法ngOnChanges()实际上应该是ngOnChanges(更改:SimpleChanges)。

答案 1 :(得分:2)

请提供image-display.component.html文件的代码。可能是模板上的变量未初始化到组件上。检查您在模板上使用的所有变量(如果它们存在于ImageDisplayComponent上。

答案 2 :(得分:2)

如果从html调用的方法与组件中方法的定义不匹配,我们会看到此错误。

调用时传递给方法的参数数量大多不匹配。

我在onModelChange方法中传递$ event,该方法未在方法定义中声明。

dropdownChanged(){
  console.log("dropdown changed");
}
dropdownChangedActual(evnt:any){
  console.log("dropdown changed");
}
<select [(ngModel)]="myModel" (ngModelChange)="dropdownChanged($event)">
     <option>.............</option>
</select>

声明$ event或我们传递的任何参数或传递方法定义中提到的参数。