我有一个问题,当我在可观察订阅中更新变量时,我的视图不会改变.我试图在等待后端响应时显示加载微调器,然后显示响应,但微调器不会隐藏.我的订阅如下所示:

this.isRequesting = "true";
this.questionService.onSubmit(form, this.questions).subscribe( (value) => {
        this._ngZone.run( () => {
             this.fileLocation = JSON.stringify(value);
             console.log(this.fileLocation);
            this.isRequesting = "false";
            console.log(this.isRequesting);
        });
    });

我对这个组件的html如下所示:

<spinner *ngIf="isRequesting=='true'"></spinner>

在我从后端(Springboot)得到响应后,我可以在控制台中看到isRequesting更改为"false",但视图仍然没有更改.旋转器是从SpinKit开始的,我修改了tutorial,让旋转器工作.

我试过:

  1. 教程中的方法(错误中有stopRefresh()和可观察对象的完整参数)
  2. ngZone强制更新我的视图.

在我从后端得到响应后,有人知道如何更新我的视图或如何隐藏我的微调器吗?

推荐答案

您在控制台上看到任何错误吗?

this.questionService.onSubmit(form, this.questions).subscribe( (value) => {
            this.fileLocation = JSON.stringify(value);
            console.log(this.fileLocation);
            this.isRequesting = "false";
            console.log(this.isRequesting);
    });

如果由于某种原因,您需要在Angular 区域之外运行此程序,那么您应该通知Angular使用这两种方法之一运行更改检测循环.

  • 只需在设置的超时时间内完成isRequesting的更新

    setTimeout( () => this.isRequesting = "false", 0);
    
  • 手动调用更改检测

    import {ChangeDetectorRef} from '@angular/core'
    constructor(private ref: ChangeDetectorRef){}
    
    this.questionService.onSubmit(form, this.questions).subscribe( (value)=> {
        //existing code
        console.log(this.isRequesting);
        this.ref.detectChanges();
    });
    

Typescript相关问答推荐

在控制器中使用@ DeliverGuards时实现循环依赖项时未定义的依赖项

如何根据参数的值缩小函数内的签名范围?

使用Angular和API请求在CRUD操作后更新客户端数据的良好实践

node—redis:如何在redis timeSeries上查询argmin?

将props传递给子组件并有条件地呈现它''

Webpack说你可能需要在Reactjs项目中增加一个加载器''

在泛型类型中对子代执行递归时出错

返回同时具有固定键和变量键的对象的函数的返回类型

如何使用Zod使一个基于其他字段值的字段为必填字段?

在类型脚本中的泛型类上扩展的可选参数

参数属性类型定义的REACT-RUTER-DOM中的加载器属性错误

将具有Readonly数组属性的对象接口转换为数组

vue-tsc失败,错误引用项目可能无法禁用vue项目上的emit

是否可以通过映射类型将函数参数约束为预定义类型?

KeyOf关键字在特定示例中是如何工作的

可赋值给类型的类型,从不赋值

为什么类型脚本使用接口来声明函数?他的目的是什么.

如何键入';v型';

在对象数组中设置值

我可以使用对象属性的名称作为对象中的字符串值吗?