Aurelia路由器,仅html视图,添加一些javascript?
我的一个视图中有一个子路由器。此子路由器用于允许用户导航到不同的子视图。现在,这些子视图不需要任何逻辑,所以只使用一个.html视图,而不使用js viewmodel可以找到它。这是因为其中一些子视图相当长,如果您从一个导航到下一个,则滚动位置与上一页中的位置相同Aurelia路由器,仅html视图,添加一些javascript?,aurelia,Aurelia,我的一个视图中有一个子路由器。此子路由器用于允许用户导航到不同的子视图。现在,这些子视图不需要任何逻辑,所以只使用一个.html视图,而不使用js viewmodel可以找到它。这是因为其中一些子视图相当长,如果您从一个导航到下一个,则滚动位置与上一页中的位置相同 configureRouter(config, router) { config.map([ { route: '', name: 'main', moduleId: 'main_view', nav: false, t
configureRouter(config, router) {
config.map([
{ route: '', name: 'main', moduleId: 'main_view', nav: false, title: 'Main' },
{ route: 'sub_view_1', name: 'p1', moduleId: 'sub_view_1.html', nav: true },
{ route: 'sub_view_2', name: 'p1', moduleId: 'sub_view_2.html', nav: true },
{ route: 'sub_view_3', name: 'p2', moduleId: 'sub_view_3.html', nav: true },
{ route: 'sub_view_4', name: 'p3', moduleId: 'sub_view_4.html', nav: true },
{ route: 'sub_view_5', name: 'p4', moduleId: 'sub_view_5.html', nav: true },
{ route: 'sub_view_6', name: 'p5', moduleId: 'sub_view_6.html', nav: true }
]);
this.router = router;
}
一种可能的解决方案是向每个子视图添加带有以下查询的脚本标记:
$('html, body').animate({ scrollTop: 0 }, 'slow');
然而,这将是js和html的混合
另一种可能的解决方案是为每个子视图创建viewmodel。但是仅仅添加一行代码似乎需要做很多工作
还有其他可能的解决办法吗?可能每个子视图都引用相同的viewmodel?当前,每个页面都需要一个VM类。这很烦人,但现在就是这样。但是,该类可以为空。可以这么简单:
export class EmptyVM { }
至于在渲染每个视图时要运行的代码,我建议挂接postdrender
hook到路由器
export class Page {
configureRouter(config, router) {
config.addPostRenderStep(ScrollToTopRenderStep);
config.map([
{ route: '', name: 'main', moduleId: 'main_view', nav: false, title: 'Main' },
{ route: 'sub_view_1', name: 'p1', moduleId: 'sub_view_1', nav: true },
//...
]);
this.router = router;
}
}
class ScrollToTopRenderStep {
run(navigationInstruction, next) {
$('html, body').animate({ scrollTop: 0 }, 'slow');
}
}
我发现了一种有趣的方法,可以在不使用JQuery和不添加额外VM类的情况下返回顶部
我假设每个视图中都有一个溢出容器(包含实际滚动条的元素)。
只需为scrolltop
属性向该容器添加一个一次性
绑定,就可以将其绑定到0
值,然后完成。
这是因为每次加载新视图时,aurelia都会重新绑定此绑定-导致该元素的scrollTop
属性为0
唯一的缩减是你不会有一个很好的滚动效果
<template>
<div scrolltop.one-time="0"> <!-- your overflow container -->
a very big html fragment that causes scrolling<br>
a very big html fragment that causes scrolling<br>
...
</div>
</template>
导致滚动的非常大的html片段
导致滚动的非常大的html片段
...