Aurelia路由器,仅html视图,添加一些javascript?

Aurelia路由器,仅html视图,添加一些javascript?,aurelia,Aurelia,我的一个视图中有一个子路由器。此子路由器用于允许用户导航到不同的子视图。现在,这些子视图不需要任何逻辑,所以只使用一个.html视图,而不使用js viewmodel可以找到它。这是因为其中一些子视图相当长,如果您从一个导航到下一个,则滚动位置与上一页中的位置相同 configureRouter(config, router) { config.map([ { route: '', name: 'main', moduleId: 'main_view', nav: false, t

我的一个视图中有一个子路由器。此子路由器用于允许用户导航到不同的子视图。现在,这些子视图不需要任何逻辑,所以只使用一个.html视图,而不使用js viewmodel可以找到它。这是因为其中一些子视图相当长,如果您从一个导航到下一个,则滚动位置与上一页中的位置相同

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片段
...