在创建组件之前调用Subscriber.next() - 最佳实践?

时间:2016-09-05 18:10:55

标签: angular rxjs

假设我有这个模板

sample.component.html:

<div *ngFor="let contact of contacts">
   <my-contact-card [contact]="contact"></my-contact-card>
</div>

和这段代码

sample.component.ts

export class SampleComponent implements OnInit {
   contacts: Subject<Contact>;
   constructor(private _contactsService: ContactsService) {
      ...
   }

   ngOnInit() {
      this._contactsService.getAll().subscribe(contact => {
         <do something with contact>
         this.contacts.next(contact);
   }
}

当然,在ContactCardComponent内,contacts中的ngOnInit订阅,因为这是@Input()参数。是的,我知道,这个例子有点奇怪,只是为了明白这一点。

但问题是ContactCardComponent的构造函数在第一个contact发布后被调用,因此它只是第二个和所有后续值到达组件,第一个值丢失。

我甚至可以将SampleComponent的订阅移至ngAfterViewInit,无所谓,ContactCardComponent仍然迟到了。

当然,我可能会使用BehaviorSubject,但在某种程度上这种感觉很糟糕,我也必须在订阅之前提供一些起始值(显而易见的候选人:null,然后再次必须在订户的代码内检查,这更糟糕。)

在这种情况下,最佳做法是什么?

0 个答案:

没有答案