【问题标题】:Angular loading spinner with [hidden] does not update带有 [hidden] 的角加载微调器不会更新
【发布时间】: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


【解决方案1】:

您可能在组件中使用 OnPush 策略。注入 ChangeDetectorRef 并尝试调用它的 detectChanges 方法。

【讨论】:

  • 谢谢。我将我的 changeDetection 调整为默认值,现在它按预期工作。
  • 我现在确实有一个相关的问题:微调器动画重新启动了很多,看起来像是在“跳跃”。这不会发生 onPush。动画可能会重新启动很多。我该怎么做?
  • 这就是我所说的。不要在推送时删除。只需在将 visible 设置为 false 后调用 detectChanges。
  • 很遗憾,detectChangesmarkForCheck 都不起作用。
  • 将固定宽度和高度设置为 div 里面的微调器。
猜你喜欢
  • 2019-07-11
  • 2014-12-07
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多