我正在从数据库中提取数据,然后在组件和子组件中显示该数据。在该子组件中,有一个弹出窗口,用户可以在其中编辑数据。编辑该数据时,更改不会反映在显示的数据中。我相信这是因为我使用异步管道将此数据传递给子元素。
我可以避免使用异步管道,但这会导致错误,因为我使用依赖于这些数据的 ngIf 语句。
来自 AngularJS,这很容易,因为我只需在子指令中使用父工作区。我在这里想念什么?
父组件 - userInfo 是正在处理的数据
<!-- CONTENT -->
<div class="content">
<ng-container *ngIf="(userInfo | async)?.data() as info">
<mat-tab-group dynamicHeight="true"
style="width:60%; margin:0px 20%;">
<mat-tab label="Bio">
<profile-about [userData]='userData' [userInfo]="info"></profile-about>
</mat-tab>
<mat-tab label="Companies">
<profile-companies [userData]='userData' [userInfo]="info"></profile-companies>
</mat-tab>
</mat-tab-group>
</ng-container>
</div>
<!-- / CONTENT -->
显示数据的子组件部分
<div class="content">
<div class="info-line"
*ngIf="userInfo.occupation!==undefined">
<div class="title">Occupation</div>
<div class="info">{{userInfo.occupation}}</div>
</div>
<div class="info-line"
*ngIf="userInfo.skills!==undefined">
<div class="title">Skills</div>
<div class="info">{{userInfo.skills}}</div>
</div>
<div class="info-line"
*ngIf="userInfo.jobs!==undefined && userInfo.jobs.length>0">
<div class="title">Jobs</div>
<table class="info jobs">
<tr class="job" *ngFor="let job of userInfo.jobs">
<td class="company">{{job.title}}</td>
<td class="date">{{job.startdate}}-{{job.enddate}}</td>
</tr>
</table>
</div>
</div>
在此子视图中打开并编辑对话框时,我尝试设置数据。它应该在绑定时自动更新。
openDialog(type) {
const dialogRef = this.dialog.open( EditBioDialog, {
panelClass: 'edit-bio-dialog',
data: { userData: this.userData, userInfo: this.userInfo, type:type }
});
dialogRef.afterClosed().subscribe(result => {
this.userInfo = result;
this.FirebaseService.updateDocDataUsingId( 'users', this.userData.uid, result )
});
}