0

这是我的 widgetquery.ts

@Injectable({ providedIn: 'root' })
export class WidgetQuery extends QueryEntity<WidgetState, WidgetTO> {
  public Widget$: Observable<WidgetTO> = this.selectActive().filter(k => !!k);
  public WidgetHistorikk$: Observable<WidgetTO[]> = this.selectAll({sortBy: 'WidgetId', sortByOrder: Order.DESC}).filter(k => !!k);

  constructor(protected store: WidgetStore) {
    super(store);
  }
}

在前端我使用 *ngIf 像这样:

 <ng-container *ngIf="widgetHistorikk$ | async"> ... </ng-container>

我组件中的构造函数调用此函数,从服务调用中获取小部件(服务调用成功...)

  private fetchWidgetHistorikk() {
    this.WidgetService.getWidgetHistorikk().filter(h => !!h).subscribe(liste => {
      this.WidgetStore.add(liste);
    });
  }

[ ]但是 selectAll 查询在返回真实数据之前返回一个空列表[ widget1, widget2 ]

所以我得到一个空列表,然后是真实数据(填充列表)。

我不想要首先出现的空列表(即使真实数据有时可能是空列表)......

为什么我从秋田得到第一个空列表?

我可以使用某种“标志”或“初始化状态”来告诉秋田:在我的服务调用完成之前不要从查询中返回数据,并通过此行将数据添加到存储中this.WidgetStore.add(liste);

4

2 回答 2

0

如果您使用的是实体存储,您可以在初始状态下简单地将加载设置为 true,在收到响应后您可以将其更改为 false,并在查询中检查状态是否正在加载显示一些正在加载的 UI 或执行任何您想要的操作.

store.setLoading(true);

并且您也可以combineLatest在加载完成时使用或获取数据。

于 2022-01-05T13:25:39.800 回答
0

您得到的是空列表,因为 Akita 总是发出初始值,如docs中所述。您可以使用 rxjs 跳过它skip(1)(或过滤掉空/未定义的值)

如果您只是不想在 UI 上显示空白内容,您可以说

<ng-container *ngIf="(widgetHistorikk$ | async)?.length > 0"> ... </ng-container>

第三种选择是在 Store 的加载状态为 true时隐藏内容

于 2022-01-05T13:45:18.293 回答