javascript - 也注入数据时,材料底部表组件中的异步数据不可用
问题描述
当我通过材料底部表[open][1]
方法中的可选配置对象传递自定义数据时,我的组件数据 - 如果异步加载,则不可用/不呈现。如果我对组件数据进行硬编码或不将配置对象传递给 open 函数,则会加载组件数据。
team.component.ts - 包含底页打开方法
export class TeamsComponent implements OnInit {
teams: Team[];
constructor(
private teamService: TeamService,
private messageService: MessageService,
private bottomSheet: MatBottomSheet
) { }
showActiveDivisionsInBottomSheet() {
const ref = this.bottomSheet.open(ActiveDivisionsComponent, {
data: { heading: 'Switch to new division' },
});
}
}
team.component.html
<ul>
<li *ngFor="let team of teams">
{{ team.name }}
<button (click)="showActiveDivisionsInBottomSheet()" mat-raised-button>{{ team.division.name }}</button>
</li>
</ul>
active-divisions.component.ts - 传递给材质底板的组件
export class ActiveDivisionsComponent implements OnInit {
divisions: Division[];
constructor(
@Inject(MAT_BOTTOM_SHEET_DATA) public data: any,
private divisionsService: DivisionsService
) { }
ngOnInit() {
this.getDivisions();
}
getDivisions(): void {
this.divisionsService.getDivisions()
.subscribe(response => this.divisions = response['data']);
}
}
活动分区.component.html
<h1>{{ data.heading }}</h1>
<ul>
<li *ngFor="let division of divisions">
{{ division.name }}
</li>
</ul>
open()
这里只渲染通过bottom sheet方法的config参数传入的标题。删除此配置选项并加载分区。
但是 - 对 active-divisions.component 中的部门数组进行硬编码,而不是从服务中获取它:
divisions: Division[] = [
{id: 1, name: 'Pool A'},
{id: 2, name: 'Pool B'}
];
传递给底部工作表组件的数据和分区数组现在都呈现了。
对于这个例子,我显然可以将标题放在活动部门组件中,但实际上我将传递所选团队的当前部门,以便它可以预先填充底部工作表。
解决方案
您需要触发更改检测来更新工作表:
import { Component, OnInit, Inject, ChangeDetectorRef } from '@angular/core';
constructor(private changeDetectorRef: ChangeDetectorRef) { }
ngOnInit() {
this.yourService.getData().subscribe(data => {
// do your stuff and notify of changes like this
this.changeDetectorRef.detectChanges();
});
}
推荐阅读
- java - 在微服务和单体应用程序之间共享令牌
- reactjs - TypeError: store.subsribe is not a function -- 在开发一个简单的 react redux 应用程序时发生此错误
- python - 矩形网格上的曲面图给出“ValueError”
- laravel - Laravel 对 `tap()` 助手的内部使用令人困惑
- php - Laravel 调试/stacktrace 页面在点击上线时尝试打开 phpstorm 而不是 VSCode
- javascript - 使用 jquery 或 javascript 访问 iframe HTML DOM
- reactjs - Framer 运动 Animate Presence 退出问题
- reactjs - 通过错误的电子邮件和密码登录时,Firebase 在控制台中出现 404 错误
- java - 如何使用 Apache Camel 将 2 个 REST APIS 的响应返回到第 3 个 REST API
- ubuntu - 启动 Ubuntu EC2 实例会话超时/登录失败