Angular 5.2 AOT--prod构建报错:Expected 0 arguments, but got 1
解决Angular AOT --prod构建时"Expected 0 arguments, but got 1"错误
兄弟,我太懂这种开发时跑的好好的,一执行ng build --prod就报错的崩溃感了!你遇到的这个问题,核心原因是Angular的AOT(提前编译)在生产构建时会做极其严格的参数匹配校验,而开发模式用的JIT(即时编译)对这类小问题会睁一只眼闭一只眼,所以才会出现“开发正常、构建报错”的反差。
具体来说,你肯定是在模板里给一个无参数的方法传了$event,比如写了<button (click)="handleClick($event)">,但组件类里的handleClick()方法根本没定义参数——JIT不管,但AOT会直接给你抛出参数不匹配的错误。
给你两种针对性的解决办法:
如果你确实需要用到这个事件对象$event
那直接给组件里的方法补上对应类型的参数就行,比如鼠标点击事件就用MouseEvent,输入框变化事件用InputEvent:
// 原来的无参数方法 handleClick() { // 你的逻辑 } // 修改后,添加对应类型的参数 handleClick(event: MouseEvent) { // 现在可以正常使用event对象了 console.log('点击的元素:', event.target); }
模板里的(click)="handleClick($event)"保持不变,这样AOT编译时参数数量和类型都匹配,就不会报错了。
如果你根本不需要用到$event
那更简单,直接把模板里的$event删掉就行:
<!-- 原来的写法 --> <button (click)="handleClick($event)">点击按钮</button> <!-- 修改后,去掉多余的$event参数 --> <button (click)="handleClick()">点击按钮</button>
组件类里的无参数方法不用改,这样参数数量完全匹配,AOT编译就能顺利通过。
另外提个小提醒:如果是自定义的输出事件,也要确保@Output()发射器的类型和方法接收的参数类型一致,避免出现类似的参数不匹配问题。
内容的提问来源于stack exchange,提问作者Md Ghouse
相关产品推荐
相关产品推荐

