我有一个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
答案 0 :(得分:2)
您可以尝试在application
路线上定义didTransition操作。如果子路由没有为事件定义处理程序,它应该冒泡到父路由,application
是最顶级的路由。
或者,您可以使用didTransition
操作创建mixin,并将该mixin添加到特定路线。
此外,查看您的代码我认为您可能对使用liquid-fire插件感兴趣(如果您的目标是动画转换)
答案 1 :(得分:0)
此插件可以满足您的需求