我在使用基于承诺的禁用按钮时出现问题,我的问题是当承诺被评估并返回它的值时,它会被重新评估并且它处于无限循环中:
<button [disabled] = "(isDisabled('myEmail@email.com') | async)">
<mat-icon>
delete
</mat-icon>
</button>
isDisabled(email: string): Promise<boolean> {
return new Promise((resolve, reject) => {
resolve(this.emailAllowed !== email)
});
}
它必须是一个承诺,因为我的方法更复杂,来自承诺。
我怎么能说&#34;只评估一次承诺&#34;?
我尝试使用&#34; as&#34;,但它出错了:
<button [disabled] = "(isDisabled('myEmail@email.com') | async) as isDisabled">
答案 0 :(得分:3)
Disabled
属性只接受布尔值,并且您的方法返回Promise。
您需要更新您的方法以返回布尔值。
isDisabled(email: string): boolean {
return new Promise((resolve, reject) => {
resolve(this.emailAllowed !== email)
});
}
答案 1 :(得分:2)
我建议一种更简单的方法来根据启动或解决承诺更新禁用,
in html:
[attr.disabled]="state"
并在您的承诺中更改state
的值。