【问题标题】:Pass async data from parent to child in Angular在Angular中将异步数据从父级传递给子级
【发布时间】:2017-03-03 18:40:57
【问题描述】:

使用 Angularfire2,我正在尝试将从 Firebase 数据库检索到的对象从父级传递给子级:

家长:

@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);
  }

}

孩子:

@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() {
  }

}

当然,这给了我“标题未定义”,因为孩子在呈现之前解析数据。我可以添加(页面|异步)?到所有变量,但这意味着在一个模板中有一堆异步调用,我理解这不是很好的做法。

将异步数据从父级传递给子级的任何最佳实践?我已经看到在一些地方使用了 ngOnChanges,但我也不确定这是否是正确的策略。

【问题讨论】:

  • 这是真的吗?在整个模板中重复使用异步管道是不好的做法?我认为您不必手动管理潜艇有一个好处...

标签: angular firebase angularfire2


【解决方案1】:

你可以使用

<div class="page-header" *ngIf="page">

或安全导航操作符

<source [srcset]="page?.header?.desktop" media="(min-width: 1024)">

【讨论】:

  • 如果有很多变量进来,*ngIf 语句是要走的路。这似乎是许多学习平台和开发专家使用的标准做法。安全导航操作员也可以!
  • 安全导航确实有效,但如果你有很多绑定,它会变得很麻烦
猜你喜欢
  • 1970-01-01
  • 2018-03-09
  • 2023-03-13
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多