如何 运行 对 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 应用程序,每次用户进行转换时我都想将页面滚动到顶部。问题是我不想在每条路线的 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 插件感兴趣(如果您的目标是动画过渡)
这个插件可以满足您的需求