根据承诺禁用按钮

时间:2018-04-24 10:23:13

标签: angular angular5 angular-promise

我在使用基于承诺的禁用按钮时出现问题,我的问题是当承诺被评估并返回它的值时,它会被重新评估并且它处于无限循环中:

<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">

2 个答案:

答案 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的值。