如何 运行 对 ember 中的每个路由转换执行操作?

How to run an action on every route transition in ember?

我有一个包含多个路由的 Ember 应用程序,每次用户进行转换时我都想将页面滚动到顶部。问题是我不想在每条路线的 didTransition 方法上重复相同的代码。

那么,有没有一种方法可以观察所有路由转换并仅在一个地方执行(声明)一个动作?

另一种表达方式:如果我有一个父路由,我可以向它的所有子路由触发相同的操作吗?

我目前的解决方案是在每个路由的 didTransition 方法上触发操作,如下所示:

//router.js
Router.map(function() {
  this.route('login');
   this.route('portal',{ path:'/'}, function() {
      this.route('clientes');
      this.route('convite');
      this.route('usuario', function() {
      this.route('view', { path: '/:id' });
  });
 });

 //everyChildren.route.js
 didTransition(){
   this.super(...arguments);
   Ember.$("html, body").animate({ scrollTop: 0 }, "slow");
 }

有办法吗?

PS:.我正在使用 Ember 版本 2.14.0

您可以尝试在 application 路线上定义 didTransition 操作。如果子路由没有为事件定义处理程序,它应该冒泡到父路由并且 application 是最顶层的路由。

或者,您可以创建一个带有 didTransition 操作的 mixin,并将该 mixin 添加到某些路由。

此外,查看您的代码,我认为您可能对使用 liquid-fire 插件感兴趣(如果您的目标是动画过渡)

使用ember-router-scroll.

这个插件可以满足您的需求