我正在使用 Ember 构建一个单页音乐网络应用程序。每个轨道在页面上都表示为一个组件。给定页面上有许多轨道。当用户单击播放时,组件会更新其 UI 以反射(reflect)这一点,并且主路由会跟踪当前正在播放的轨道。
但是当我切换路线来探索应用程序的其他部分,然后返回到正在播放轨道的路线时,Ember 已销毁并重建了每个组件,将所有内容设置回其初始状态并使路线的 current_track 对象过时.
如何在路由转换中最好地保持这样的状态?
我的路线层次结构:
master-route
liked-tracks
favorite-tracks
posted-tracks
另一种思考方式是:在 soundcloud 上,您播放轨道,然后导航到不同的路线。当您向后导航时,播放元素并未丢失其状态或被重建。
最佳答案
执行此操作的正确方法是服务。
您可能会有一个服务player
并将其注入(inject)到您的组件中。然后你就有了一个方便的地方来管理所有放置器的东西,并且可以在你的组件中使用它。
您可以访问服务上的属性,甚至可以在计算属性中使用它,如下所示:
player: Ember.inject.service(),
isCurrentTrack: Ember.computed('track', 'player.currentTrack', {
get() {
return get(this, 'track') === get(this, 'player.currentTrack');
}
}),
这实际上是服务的用例!
关于javascript - 通过路由转换维护组件状态 - EmberJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38907180/