【问题标题】:How to trigger an event when component is navigated to?组件导航到时如何触发事件?
【发布时间】:2017-01-16 16:42:06
【问题描述】:

我有一个 angular2 应用程序 (RC5),其中有一个 章节 组件。这基本上有一个大模板文件 - chapter.html - 有这个:

<div *ngIf="chapter == 1">
<!-- Chapter 1 content -->
</div>
<div *ngIf="chapter == 2">
<!-- Chapter 2 content -->
</div>
<!-- etc. -->

然后我有一些箭头按钮用于下一章上一章。这些触发事件,例如

if (this.chapter !== '6') {
  var next = parseInt(this.chapter) + 1;
  console.log(next);
  let link = ['/tutorial/chapter', next];
  this.router.navigate(link);
}

所以一切正常,但是,按钮位于一章的底部,因此当单击它们时,会显示下一章,但会自动向下滚动。所以在路由器点击时,我想触发一个事件并滚动到页面顶部,但是,当我导航到同一个组件时,ngOnInit() 没有被触发。

我该怎么做?

【问题讨论】:

  • window.scrollTop=0; 向上滚动?
  • @epascarello 是的,但我想要一个事件来执行它,它在组件导航后触发
  • 那么听听章节何时更新或router.subscribe?

标签: javascript angular typescript angular2-routing


【解决方案1】:
constructor(private route:ActivatedRoute) {
  this.route.params.subscribe(params => {
        //do your stuffs...
  });
}    

【讨论】:

    【解决方案2】:

    如果你导航到同一个组件,至少有一个参数发生了变化,否则路由器不会重新导航。

    您可以订阅参数更改并在更改时调用滚动

    constructor(private route:ActivatedRoute) {
      this.route.params.forEach(p => this.doScroll());
    }
    

    【讨论】:

    • 另外,您如何推荐滚动到垂直溢出的 div 的顶部?也许就像你在这里的answer 一样?
    • 你不能把scrollTop设置为0吗?
    • window.scrollTop=0;?
    • 我是这么认为的。我不知道,我目前只是在打电话。
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2014-10-12
    • 1970-01-01
    • 2017-03-29
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多