Angular2 - 'ng build -prod' 结果提供的参数与调用目标的任何签名都不匹配
Angular2 - 'ng build -prod' results in Supplied parameters do not match any signature of call target
我在用什么
- Angular
我想做什么
- 运行 ng build -prod 命令
会发生什么
- 我收到以下错误:
Supplied parameters do not match any signature of call target.
- 当运行 'ng build --watch'
时不存在此错误
我试过的
- 我删除了我的一些 HTML,其中包括一个提交按钮,用于将一些值传递到我的组件打字稿文件中的一个函数。当我这样做时,构建命令工作正常。
组件HTML
下面是导致问题的 HTML 片段。我从输入字段中获取值并将它们推送到一个函数。当 运行 'ng build -watch' 时,我没有任何问题,一切正常。只有在 'prod' 命令上,我才会在终端中收到错误消息
<div class="vs__details__actions">
<button class="vs__button"
[disabled]="!selectedFiles"
(click)="submitForm(newTitle.value, newReference.value, newDate.value, newAuditorName.value, newCompanyName.value); newTitle.value='';
newReference.value=''; newDate.value=''; newAuditorName.value=''; newCompanyName.value=''">
Add
</button>
</div>
组件打字稿文件
import { Component, OnInit } from '@angular/core';
import { ProjectsAddService } from './projects-add.service';
import { Upload } from './upload';
import * as _ from "lodash";
@Component({
selector: 'upload-form',
templateUrl: './projects-add.component.html',
styleUrls: ['./projects-add.component.css']
})
export class ProjectsAddComponent {
selectedFiles: FileList;
currentUpload: Upload;
constructor(private upSvc: ProjectsAddService) { }
detectFiles(event) {
this.selectedFiles = event.target.files;
}
uploadSingle() {
let file = this.selectedFiles.item(0)
this.currentUpload = new Upload(file);
}
submitForm(title: string, reference: string, date: string, auditorName: string, newCompanyName: string, upload: Upload) {
let file = this.selectedFiles.item(0)
this.currentUpload = new Upload(file);
this.upSvc.submitForm(title, reference, date, auditorName, newCompanyName, this.currentUpload);
}
}
任何帮助将不胜感激:)
您的提交表单需要 6 个参数,而您在模板中使用 5 个值调用该函数。
您缺少 "upload".
的值
使用--prod
(生产模式)angular-cli 将使用AoT(提前编译)。
AoT 对类型、签名和其他东西更加敏感。
您的 submitForm
函数需要一个(非可选)upload: Upload
参数作为最后一个参数,您不会在点击时传递它。
这里有两个选项:
第一种(也是建议的)方法:将其设为可选,如 submitForm(title: string, reference: string, date: string, auditorName: string, newCompanyName: string, upload?: Upload)
备选方案:在模板的最后一个参数处传递 null
。
希望对您有所帮助。
更新:在你编辑你的问题和你的评论之后,我可能应该只在这里添加第三个选项:如果你的函数中没有使用它,只需删除参数。
我在用什么
- Angular
我想做什么
- 运行 ng build -prod 命令
会发生什么
- 我收到以下错误:
Supplied parameters do not match any signature of call target.
- 当运行 'ng build --watch' 时不存在此错误
我试过的
- 我删除了我的一些 HTML,其中包括一个提交按钮,用于将一些值传递到我的组件打字稿文件中的一个函数。当我这样做时,构建命令工作正常。
组件HTML
下面是导致问题的 HTML 片段。我从输入字段中获取值并将它们推送到一个函数。当 运行 'ng build -watch' 时,我没有任何问题,一切正常。只有在 'prod' 命令上,我才会在终端中收到错误消息
<div class="vs__details__actions">
<button class="vs__button"
[disabled]="!selectedFiles"
(click)="submitForm(newTitle.value, newReference.value, newDate.value, newAuditorName.value, newCompanyName.value); newTitle.value='';
newReference.value=''; newDate.value=''; newAuditorName.value=''; newCompanyName.value=''">
Add
</button>
</div>
组件打字稿文件
import { Component, OnInit } from '@angular/core';
import { ProjectsAddService } from './projects-add.service';
import { Upload } from './upload';
import * as _ from "lodash";
@Component({
selector: 'upload-form',
templateUrl: './projects-add.component.html',
styleUrls: ['./projects-add.component.css']
})
export class ProjectsAddComponent {
selectedFiles: FileList;
currentUpload: Upload;
constructor(private upSvc: ProjectsAddService) { }
detectFiles(event) {
this.selectedFiles = event.target.files;
}
uploadSingle() {
let file = this.selectedFiles.item(0)
this.currentUpload = new Upload(file);
}
submitForm(title: string, reference: string, date: string, auditorName: string, newCompanyName: string, upload: Upload) {
let file = this.selectedFiles.item(0)
this.currentUpload = new Upload(file);
this.upSvc.submitForm(title, reference, date, auditorName, newCompanyName, this.currentUpload);
}
}
任何帮助将不胜感激:)
您的提交表单需要 6 个参数,而您在模板中使用 5 个值调用该函数。 您缺少 "upload".
的值使用--prod
(生产模式)angular-cli 将使用AoT(提前编译)。
AoT 对类型、签名和其他东西更加敏感。
您的 submitForm
函数需要一个(非可选)upload: Upload
参数作为最后一个参数,您不会在点击时传递它。
这里有两个选项:
第一种(也是建议的)方法:将其设为可选,如 submitForm(title: string, reference: string, date: string, auditorName: string, newCompanyName: string, upload?: Upload)
备选方案:在模板的最后一个参数处传递 null
。
希望对您有所帮助。
更新:在你编辑你的问题和你的评论之后,我可能应该只在这里添加第三个选项:如果你的函数中没有使用它,只需删除参数。