我的应用程序似乎在使用JIT编译器时有效,但是当我尝试使用ng build --prod
使用AOT编译器时,它会抛出错误:
ERROR in : Can't bind to 'disabled' since it isn't a known property of 'div'. ("[ERROR ->]<div formButton></div>")
如何确定此错误的来源?
我刚刚添加了延迟加载的功能模块,而不是导入app.module.ts
中的所有内容,我不知道是否需要将FormButtonComponent
导入到功能模块中?
我搜索了代码库,除了formButton
之外,我找不到button
除button.component.ts
之外的任何实例。
这是import { Component, HostBinding, Input, OnChanges, SimpleChanges } from "@angular/core";
/**
* Button with loading and disabled states
*/
@Component({
moduleId: module.id,
selector: '[formButton]',
templateUrl: 'button.component.html'
})
export class FormButtonComponent implements OnChanges {
@Input() loading? = false;
@Input() disabled? = false;
@HostBinding('disabled') disabledAttribute = false;
ngOnChanges(changes: SimpleChanges): void {
this.updateState();
}
updateState(): void {
this.disabledAttribute = this.disabled || this.loading;
}
}
:
button.component.html
<ng-content></ng-content>
<spinner [size]="small" *ngIf="loading"></spinner>
<button formButton [loading]="template.loading" [disabled]="disabled" class="button" type="submit">Design</button>
以下是我应用中其他地方的一些示例调用:
<button formButton class="button" [loading]="form.disabled" (click)="save()">Change Password</button>
<button formButton [ngClass]="buttonClass" (click)="upload()" [loading]="uploaderWrapper.isUploading">{{ buttonText }}</button>
Variable([Item])
答案 0 :(得分:1)
IT部门会在您的代码中的某个位置<div formButton></div>
搜索您的代码并将其删除
答案 1 :(得分:1)
编辑:我和一个Angular团队成员交谈过,这是因为我的选择器没有指定一个元素。因此,当使用ng build --prod
角度使用div
作为“最低公分母”进行构建时:
您看到的错误是指因为div是最常见的 HTML元素的分母。如果组件选择器未指定 任何其他元素类型,然后它变成一个div。
所以有两种解决方案:
1)使选择器更具体,以便它只尝试使用具有disabled
属性的元素进行AOT编译。
将selector: '[formButton]'
更新为selector: 'button[formButton]'
@Component({
moduleId: module.id,
selector: 'button[formButton]',
templateUrl: 'button.component.html'
})
2)更新以使用attr.disabled
代替disabled
。这样做的缺点是,您必须使用value | null
而不是true | false
,因为浏览器会查找disabled
属性的存在,而不是它的值。
@HostBinding('disabled') disabledAttribute = false;
到
@HostBinding('attr.disabled') disabledAttribute = false;
使用此模板:
<ng-content></ng-content>
<spinner [size]="small" *ngIf="loading"></spinner>