基于承诺禁用按钮

disable button based on promise

我在使用基于 promise 的禁用按钮时遇到问题,我的问题是当 promise 被评估并且 returns 它值时,它被重新评估并且它处于无限循环中:

<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)
    });
}

必须是promise,因为我的方法比较复杂,来自promise。

我怎么说 "evaluate the promise just once"?

我尝试使用 "as",但出现错误:

<button [disabled] = "(isDisabled('myEmail@email.com') | async) as isDisabled">

Disabled 属性只接受布尔值,你的方法是 returning 一个 Promise。

您需要将方法更新为 return 布尔值。

    isDisabled(email: string): boolean {
    return new Promise((resolve, reject) => {
        resolve(this.emailAllowed !== email)
    });
}

我建议一种更简单的方法来更新禁用基于开始或解决承诺,

在html中:

[attr.disabled]="state"

并在您的承诺中更改 state 的值。