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

时间:2018-06-18 14:06:10

标签: ember.js

我有一个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

2 个答案:

答案 0 :(得分:2)

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

或者,您可以使用didTransition操作创建mixin,并将该mixin添加到特定路线。

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

答案 1 :(得分:0)

使用ember-router-scroll

此插件可以满足您的需求