Angular 4 router.events似乎没有在用户第一次导航时触发RoutesRecognized事件

时间:2017-11-08 09:00:44

标签: angular events router

这是一个测试路由器触发事件​​的简单ts代码

import { Component, OnInit } from '@angular/core';
import { Router, RoutesRecognized } from '@angular/router';

@Component({
  selector: 'user',
  templateUrl: './user.component.html',
  styleUrls: ['./user.component.css']
  })
export class UserComponent implements OnInit {

	constructor(private router: Router) {
		this.router.events.subscribe((e)=>{console.log(e)})
	}

	ngOnInit() {}
}
触发的唯一事件是NavigationEnd。我在哪里可以看到其他事件?

2 个答案:

答案 0 :(得分:1)

misutkame,我希望这还不算太晚,我遇到了同样的问题。我认为这是由于在组件的生命周期开始之前触发了路由器事件。因此,您要询问的内容无法直接解决。 不过,有几种解决方法。

  1. 在创建子组件期间使用已激活路由的快照。这样,您将获得组件生命周期中逻辑所需的路由器数据。您仍然需要为以后的事件设置一个侦听器。

  2. 让父组件监听路由器事件,更新一个behaviorSubject并将其作为输入传递给子代。

答案 1 :(得分:0)

尝试使用RoutesRecognized

import { RoutesRecognized} from '@angular/router';


ngOnInit() {
    this.router.events
      .filter((e: any) => e instanceof RoutesRecognized)
      .pairwise()
      .subscribe((e: any) => {
        console.log(e);
      });
  }