Angular 服务返回时角度组件未更新

Angular 服务返回时角度组件未更新,angular,ionic-framework,angular-changedetection,Angular,Ionic Framework,Angular Changedetection,我有一个有角度的组件,在一些图标上有徽章。徽章的编号来自我在ionViewWillEnter()中进入页面时调用的api。当api返回时,结果被分配给一个局部变量,然后在标记中引用该局部变量在Chrome桌面上,一切正常。在Chrome android中,直到我触摸屏幕,徽章才会出现。为什么对局部变量的更改不会立即反映在标记中?我试着把整个程序放在一个区域,但没有用。我还研究了,ChangeDetectorRef.detectChanges()和markForCheck(),Applicatio

我有一个有角度的组件,在一些图标上有徽章。徽章的编号来自我在ionViewWillEnter()中进入页面时调用的api。当api返回时,结果被分配给一个局部变量,然后在标记中引用该局部变量在Chrome桌面上,一切正常。在Chrome android中,直到我触摸屏幕,徽章才会出现。为什么对局部变量的更改不会立即反映在标记中?我试着把整个程序放在一个区域,但没有用。我还研究了,
ChangeDetectorRef.detectChanges()
markForCheck()
ApplicationRef.tick()

更新2: 数据作为对象传递给子组件,然后通过@Input properties作为原语再次传递给孙子。如果我还直接在父组件的标记中显示信息,那么当服务调用返回时,父组件和子组件都会按预期进行更新。如果我试图通过在父对象上显示display:none来欺骗系统,我的问题又会出现,我必须触摸屏幕才能看到子对象的变化

这是我的.ts代码

// declaration
pastilles: Pastilles = { nbFraisCarte: 0, nbFraisRefuse: 0, nbJustificatifs: 0 };

async ionViewWillEnter(){
  this.ngZone.run(async () => {
    await this._myService
      .pastilles()
      .toPromise()
      .then((resp) => {
        if ((resp.status = 'success')) {
          this.pastilles= resp.sData;
        }
      });
  });
}
在子组件中,我有

@Input()
pastilles: Pastilles;
然后在标记中

<tne-round-button
  (click)="createFraisFrom.emit('justificatif')"
  icon="image"
  [pastille]="pastilles.nbJustificatifs"
></tne-round-button>
<div class="pastille" *ngIf="pastille">
  <div class="pastille-text">{{ pastille }}</div>
</div>
和标记

<tne-round-button
  (click)="createFraisFrom.emit('justificatif')"
  icon="image"
  [pastille]="pastilles.nbJustificatifs"
></tne-round-button>
<div class="pastille" *ngIf="pastille">
  <div class="pastille-text">{{ pastille }}</div>
</div>

{{锭子}}

我错过了什么?

因为锭子是一个对象,Angular无法判断该对象是否已更改,因为它的引用仍然相同,请尝试这样做

this.pastilles={…resp.sData}
还是这个

Object.assign(this.pastilles,resp.sData);

我会把他们带出禁区。让我知道它是否有效

好吧,这几乎让我心碎。事实证明,问题在于数据是在子组件中使用的,并且根本没有对子组件进行更新。解决方法是直接在接收数据的组件的模板中使用数据,从而触发刷新。我在父模板中添加了一个不可见的div,如下所示

<div style="visibility: hidden;">{{pastilles.nbJustificatifs}}</div>
{{pastilles.nbf}

…徽章仍然在我的孩子组件中处理,神奇地出现了。这很难看,但我要走了

在执行此操作时,对象引用实际上正在更改。pastilles=resp.sData我认为你是对的,但我也遇到过类似的问题,这两个工具在过去对我很有效,但现在我真的不知道如何“证明”删除这些代码片段,我绝对尝试过。没有结果。这听起来像是子组件中的更改检测问题。您介意添加该子组件的一些代码吗?:)我有兴趣把这件事做到底。我已经更新了这个问题,如果你有什么需要说明的话!