将异步数据从 parent 传递到 Angular 中的 child
Pass async data from parent to child in Angular
使用 Angularfire2,我试图将从 Firebase 数据库中检索到的 object 从 parent 传递到 child:
Parent:
@Component({
selector: 'app-page',
styleUrls: ['./page.component.scss'],
template: `
<app-page-render [page]="page"></app-page-render>
`,
})
export class PageComponent implements OnInit {
slug: string;
page: FirebaseObjectObservable<Page>;
constructor(private af: AngularFire, private route: ActivatedRoute) {
}
ngOnInit() {
this.route.params
.switchMap((params: any) => this.af.database.object(`/pages/${params['page-slug']}`))
.subscribe(page => this.page = page);
}
}
Child:
@Component({
selector: 'app-page-render',
styleUrls: ['./page-render.component.scss'],
template: `
<div class="page-header">
<div class="page-banner">
<picture>
<source [srcset]="page.header.desktop" media="(min-width: 1024)">
<source [srcset]="page.header.tablet" media="(min-width: 768px)">
<img [src]="page.header.mobile" [alt]="page.header.alt" class="page-banner--image">
</picture>
<h1 class="page-banner--heading">{{page.header.title}}</h1>
<div>
</div>
<main class="main-container">
<div [innerHTML]="page.content"></div>
</main>
`
})
export class PageRenderComponent implements OnInit {
@Input()
page: any;
constructor() { }
ngOnInit() {
}
}
当然这给了我 "header is undefined" 因为 child 在呈现之前解析数据。我可以添加(页面 | 异步)吗?到所有变量,但这意味着在一个模板中有一堆异步调用,我理解这不是很好的做法。
将异步数据从 parent 传递到 child 有什么最佳做法吗?我已经看到在某些地方使用了 ngOnChanges,但我也不确定这是否是正确的策略。
您可以使用
<div class="page-header" *ngIf="page">
或安全导航操作员
<source [srcset]="page?.header?.desktop" media="(min-width: 1024)">
使用 Angularfire2,我试图将从 Firebase 数据库中检索到的 object 从 parent 传递到 child:
Parent:
@Component({
selector: 'app-page',
styleUrls: ['./page.component.scss'],
template: `
<app-page-render [page]="page"></app-page-render>
`,
})
export class PageComponent implements OnInit {
slug: string;
page: FirebaseObjectObservable<Page>;
constructor(private af: AngularFire, private route: ActivatedRoute) {
}
ngOnInit() {
this.route.params
.switchMap((params: any) => this.af.database.object(`/pages/${params['page-slug']}`))
.subscribe(page => this.page = page);
}
}
Child:
@Component({
selector: 'app-page-render',
styleUrls: ['./page-render.component.scss'],
template: `
<div class="page-header">
<div class="page-banner">
<picture>
<source [srcset]="page.header.desktop" media="(min-width: 1024)">
<source [srcset]="page.header.tablet" media="(min-width: 768px)">
<img [src]="page.header.mobile" [alt]="page.header.alt" class="page-banner--image">
</picture>
<h1 class="page-banner--heading">{{page.header.title}}</h1>
<div>
</div>
<main class="main-container">
<div [innerHTML]="page.content"></div>
</main>
`
})
export class PageRenderComponent implements OnInit {
@Input()
page: any;
constructor() { }
ngOnInit() {
}
}
当然这给了我 "header is undefined" 因为 child 在呈现之前解析数据。我可以添加(页面 | 异步)吗?到所有变量,但这意味着在一个模板中有一堆异步调用,我理解这不是很好的做法。
将异步数据从 parent 传递到 child 有什么最佳做法吗?我已经看到在某些地方使用了 ngOnChanges,但我也不确定这是否是正确的策略。
您可以使用
<div class="page-header" *ngIf="page">
或安全导航操作员
<source [srcset]="page?.header?.desktop" media="(min-width: 1024)">