【发布时间】:2017-11-30 00:33:26
【问题描述】:
我正在使用 Angular 4,并且我有一个组件位于我的应用程序中的 'player/:id' 路由中。当播放器从应用程序中导航到此路线时,我使用 currentPlayerService 来同步应用程序中的当前播放器。这适用于以下代码。
this.currentPlayerService.getPlayer()
.subscribe((player) => this.currentPlayer = player);
但是,当应用程序直接加载到 'player/:id' 路由(从外部链接)时,我可以注释掉上面的内容并使用下面的代码从路由参数中设置 currentPlayer。
this.route.params.subscribe(params => {
this.playerService.getPlayer(params.id)
.subscribe((player) => {
this.currentPlayer = player;
this.currentPlayerService.setPlayer(player);
});
});
我想做的(并且很难找到“反应式函数编程”的说法)是仅当 this.currentPlayerService.getPlayer() 没有值时才从参数加载播放器加载。我很难想出一种在某种逻辑控制流中使用 Observable 的方法,因此我们将不胜感激。
谢谢!
【问题讨论】:
-
你能展示你的播放器服务吗?
-
我建议你注册到一个单一的位置,你的 currentPlayerService,如果它检测到它可以直接从参数中检索用户,那么它会这样做,如果不是,它将使用它的当前方法.您的应用程序的基本单点真理应该是“getPlayer”
-
(喜欢你的展示图片)。 “负载值”是什么意思。您是否正在缓存 http currentUser 响应?
-
为什么不总是使用
playerService.getPlayer来获取当前播放器,而总是在初始化时使用currentPlayerService.setPlayer(player)来设置播放器从路由?然后在setPlayer中,如果你愿意,你可以处理如果值已经/没有改变的情况
标签: javascript angular typescript rxjs