【发布时间】:2020-05-26 18:47:38
【问题描述】:
我的程序中有一个 Angular 材质加载微调器,它在调用 REST API 时显示。当 promise 解决时,visible 变量被设置为 false,并且微调器应该消失。
我的问题是微调器在再次设置为 false 时不会更新。我必须在按钮或其他东西上手动触发工具提示,然后页面才会隐藏微调器。
我知道变量设置正确,但页面在它应该消失时没有更新微调器状态。显示正常。
状态设置和取消设置在同一个函数中的问题吗?
这是模板
<div [hidden]="!visible" class="row justify-content-center">
<mat-spinner></mat-spinner>
</div>
当我点击更新按钮时,this.visible = true; 被调用。
然后,一个 http 服务被调用:
this.httpService.getData(data).then(receivedData => {
[...]
this.visible = false; // this is called correctly, but does not change the visibility.
但是微调器还在,连同现在绘制的所有图表:
我该如何解决这个问题?微调器应该不再可见,但只有在我将鼠标悬停在按钮或其他元素上后才会消失。
【问题讨论】:
-
为什么不使用
*ngIf="visible"或[style.display]="visible ? 'block' : 'none'"而不是[hidden]="!visible"?ngIf将销毁组件并将其从 DOM 中删除,style.display将使用 CSS 隐藏它 -
我尝试了所有这些并且发生了同样的事情。它仅在我将鼠标悬停在按钮上或执行其他操作后才会更新,但如果我不这样做,微调器将永远保留。
-
您能显示更多代码吗?这个问题目前很难查明,大家只能猜测了。
-
是否禁用更改检测 (angular.io/api/core/ChangeDetectorRef) ?
-
你正在使用 ChangeDetectionStrategy.OnPush 吗?
标签: angular typescript angular-material