首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在模板中使用异步命令显示数据?

如何在模板中使用异步命令显示数据?
EN

Stack Overflow用户
提问于 2019-09-25 15:02:58
回答 1查看 56关注 0票数 0

我有一个8角的应用程序。我使用async命令将数据从子组件传递到父组件。但是数据是由服务器返回的,但是HTML模板没有显示数据。

这是我的typescript

代码语言:javascript
复制
correspondenceEntries$: Observable<DossierEntry[]>;
  attachmentEntries$: Observable<DossierEntry[]>;

  @Input() allCorrespondence: Array<DossierEntry>;
  @Input() correspondenceEntries: Array<DossierEntry>;
  @Input() attachmentEntries: Array<DossierEntry>;

  message = '';
  emptyMessageCorrespondentie = 'Geen correspondentie.';
  errorMessageConnection = 'Er ging iets mis met de connectie. Probeer over enkele minuten nogmaals.';

  correspondenceLoaded = false;

  showingSingle = false;

  single: DossierEntry;

  constructor(private documentCorrespondeceService: DocumentCorrespondenceService, private authService: AuthService) {}

  ngOnInit() {


    this.authService.loginStatus().subscribe(user => {
      const UUID = user.profile.participant;

      this.documentCorrespondeceService.getDossierEntry(UUID, 'correspondence').subscribe(result => {
        this.handleCorrespondenceLoad(result), (this.correspondenceLoaded = true);
      }, msg => (this.message = this.emptyMessageCorrespondentie));
    });
  }

  handleCorrespondenceLoad(result: any) {
    if (result.length === 0) {
      this.message = this.emptyMessageCorrespondentie;
      return;
    }
    this.allCorrespondence = result;
    this.attachmentEntries = [];
    this.correspondenceEntries = [];

    const groups = _.groupBy(result, 'type');
    console.log(this.correspondenceEntries = groups.correspondence);
    console.log(this.attachmentEntries = groups.attachments);
    this.correspondenceEntries = groups.correspondence;
    this.attachmentEntries = groups.attachments;
  }

下面是HTML模板:

代码语言:javascript
复制
<h2 class="dossier-page-header">Correspondentie</h2>

  <p class="data-entry" *ngIf="!allCorrespondence">{{ message }}</p>


<ng-container *ngIf="(correspondenceEntries$ | async) as correspondenceEntries">
  <app-dossier-correspondence-list [correspondenceEntries]="correspondenceEntries" ></app-dossier-correspondence-list>
</ng-container>

<ng-container *ngIf="(attachmentEntries$ | async) as attachmentEntries">
  <app-dossier-correspondence-attachments [attachmentEntries] = "attachmentEntries"></app-dossier-correspondence-attachments>
</ng-container>


  <app-dossier-correspondence-item
    [item]="single"
    (goBack)="goBack($event)"
    *ngIf="showingSingle">
  </app-dossier-correspondence-item>

所以当我这么做的时候

代码语言:javascript
复制
console.log(this.correspondenceEntries = groups.correspondence);
    console.log(this.attachmentEntries = groups.attachments);

我看到了数据:

代码语言:javascript
复制
Array(13)
:4200/dossier-dossier-module-ngfactory.js:17533 Array(3)

但它没有显示在视图中。

那么如何改进这个,这样的数据也会在视图中显示出来。

谢谢。

我明白。

但如何做到这一点:

代码语言:javascript
复制
this.attachmentEntries$ =     this.documentCorrespondeceService.getDossierEntry(UUID, 'correspondence').subscribe(result => {
        this.handleCorrespondenceLoad(result), (this.correspondenceLoaded = true);
      }, msg => (this.message = this.emptyMessageCorrespondentie));
    });

当然,这也是work.So如何使用可观察到的:

代码语言:javascript
复制
correspondenceEntries$: Observable<DossierEntry[]>;
  attachmentEntries$: Observable<DossierEntry[]>;

因为有两个数组。

你的意思是这样:

代码语言:javascript
复制
<app-dossier-correspondence-list *ngFor="let item of correspondenceEntries"  ></app-dossier-correspondence-list>

这是:

代码语言:javascript
复制
ngOnInit() {


    this.authService.loginStatus().subscribe(user => {
      const UUID = user.profile.participant;

      this.documentCorrespondeceService.getDossierEntry(UUID, 'correspondence').subscribe(result => {
        this.handleCorrespondenceLoad(result), (this.correspondenceLoaded = true);
      }, msg => (this.message = this.emptyMessageCorrespondentie));
    });
  }

但是

子组件已经如下所示:

代码语言:javascript
复制
<div *ngIf="!showingSingle  && correspondenceEntries && correspondenceEntries.length > 0;">
  <div class="main-row main-row-dossier">
    <section class="data-entry">
      <h3 class="dossier-header">Algemeen</h3>
      <table class="dossier-table" *ngIf="correspondenceEntries  else loadingCorrespondenceEntires ">
        <thead class="dossier-tableheader">
          <tr>
            <th class="dossier-tablehead fixed-one-fifth">Datum</th>
            <th class="dossier-tablehead fixed-four-fifths">Onderwerp</th>
          </tr>
        </thead>
        <tbody class="dossier-tablebody">
          <tr class="dossier-correspondencerow" *ngFor="let entry of correspondenceEntries; let i = index" (click)="gotoItem(i, entry.type)">
            <td>{{ entry.date | date:"dd-MM-y" }}</td>
            <td>{{ entry.name }}</td>
          </tr>
        </tbody>
      </table>
    </section>
  </div>
</div>

<ng-template #loadingCorrespondenceEntires>
  <div>..Loading </div>
</ng-template>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 15:12:52

你正在混合两种方式来订阅一个可观察的。选择一个,不要兼而有之。

解决方案1:

代码语言:javascript
复制
// component
this.myService.getDataFromServer().subscribe(
  result => this.data = result
);

<!-- HTML -->
<div *ngFor="let item of data">
  <span>{{item.label}}</span>
</div>

解决方案2:

代码语言:javascript
复制
// component
this.data$ = this.myService.getDataFromServer()

<!-- HTML -->
<div *ngIf="(data$ | async) as data">
  <span>{{data.label}}</span>
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58101427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档