javascript - 通过路由转换维护组件状态 - EmberJS

标签 javascript ember.js ember-cli

我正在使用 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/

相关文章:

search - 去抖动 ember 搜索输入

ember.js - 如何使用 Webstorm 调试 ember 集成测试

javascript - 我如何计算一个位置是否在 3d 立方体内

javascript - 单击按钮可增加/扩展 Electron 窗口的高度

javascript - 如何在 Ember.js 中创建多选列表

javascript - Ember 快速入门 : could not find module `@glimmer/component` when adding JS file to first component

javascript - 使用 Ember-CLI 导入 jQuery-mockjax - 未读取 Brocfile

ember.js - 模型测试中"Attempting to register an unknown factory"

c# - 当通过 css 设置大小时,如何在 javascript 事件中放大图像?

javascript - 根据多个值显示隐藏 div