Как инициировать событие при переходе к компоненту?

У меня есть приложение angular2 (RC5), в котором есть компонент chapter. По сути, это большой файл шаблона - 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() не запускается.

Как я могу это сделать?


person George Edwards    schedule 08.09.2016    source источник
comment
window.scrollTop=0; Прокрутить назад?   -  person epascarello    schedule 08.09.2016
comment
@epascarello да, точно, но я хочу, чтобы событие выполнялось из этого, которое также запускается после навигации по компоненту.   -  person George Edwards    schedule 08.09.2016
comment
Так что слушайте, когда обновится глава или router.subscribe?   -  person epascarello    schedule 08.09.2016


Ответы (1)


Если вы переходите к тому же компоненту, по крайней мере параметр изменился, иначе маршрутизатор не будет повторно перемещаться.

Вы можете подписаться на изменения параметров и вызывать прокрутку изменений

constructor(private route:ActivatedRoute) {
  this.route.params.forEach(p => this.doScroll());
}
person Günter Zöchbauer    schedule 08.09.2016
comment
Кроме того, как бы вы порекомендовали прокрутить вверх вертикально переполненный div? Может быть, как в вашем ответе здесь? - person George Edwards; 09.09.2016
comment
Разве вы не можете просто установить scrollTop на 0? - person Günter Zöchbauer; 10.09.2016
comment
Я так думаю. Я не знаю его наизусть и сейчас только по телефону. - person Günter Zöchbauer; 10.09.2016