我的angular2 +组件数据应该是一个对象还是一个可观察的?

时间:2017-06-01 14:47:39

标签: angular typescript design-patterns rxjs

假设我想构建一个angular2 +组件,从api中获取一些Center,并显示其名称。 由于一些websocket连接,thing可以随时更新。

这两种方法中哪一种更惯用?

首次尝试:thing作为对象

基本上,组件订阅了websocket observable,并在必要时更新自己的thing对象。如果使用了子组件,那么我们将传递thing作为输入。

Thing

第二次尝试:interface Thing { name: string } @Component({ selector: 'app-thing', template: '<h1> {{ thing?.name }} </h1>', }) export class ThingComponent implements OnInit { public thing: Thing constructor( private route: ActivatedRoute, private thingService: ThingService, ) {} public ngOnInit() { this.route.params.subscribe(params => { this.thingService.get(params.id).subscribe(({thing}) => { this.thing = thing }) }) this.thingService.socketObservable().subscribe(newThing => { console.log('Thing has been updated !') this.thing = newThing }) } } 作为主题

我们现在没有对象thing,而是thing: Thing(此处未显示,但我使用的是Subject而不是Observable,因此我可以在thing: Subject<Thing>中完成方法)

在此版本中,模板使用ngOnDestroy管道,子组件将接收可观察而不是async对象。

Thing

据我所说,两个版本似乎都能正常工作。我怀疑thtey并不完全相同,但我缺乏知识决定我应该更喜欢第一个还是第二个。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下你需要使用.table-responsive{ overflow-x:scroll; margin: 0 !important; padding-bottom: 0 !important; } ,因为Socket的“流”性质。但通常这个问题与您喜欢的编码风格更相关。如果您对反应式编程感到满意,那么您可能需要使用反应式方法来解决问题