代码之家  ›  专栏  ›  技术社区  ›  BBaysinger alex

Angular 2+ActivationEnd事件回调多次调用

  •  2
  • BBaysinger alex  · 技术社区  · 6 年前

    我看到一个订阅 router.events 对回调函数的每个路由更改生成三个调用,并且每个报告 instanceof event 作为 ActivationEnd .

    console.log('This code runs only once, at site initialization.');
    router.events.subscribe((event: RouterEvent) => {
        if (event instanceof ActivationEnd) {
            console.log('This should only log once per route change, but logs three times.');
        };
    });
    

    我找到了 this thread 关于Github,这似乎有关系,但我很难相信这仍然是一个问题…

    我用的是角5(5.2.10)。

    更新:似乎每个路由段都将触发一次此事件…检查文档。

    2 回复  |  直到 5 年前
        1
  •  2
  •   BBaysinger alex    6 年前

    似乎我应该使用NavigationEnd而不是ActivationEnd来实现所需的结果。我早该知道的。我想我的眼睛没注意到区别。

        2
  •  0
  •   Nick    5 年前

    是否多次启动?

    如果执行两次或多次此事件,

    router.events.subscribe((event: RouterEvent) => {
    

    然后这会被多次解雇。

    if (event instanceof ActivationEnd) {
        console.log('This should only log once per route change, but logs three times.');
    };
    

    所以请做吧

        if (!alreadyexist){
    
        router.events.subscribe((event: RouterEvent) => {
    
          if (event instanceof ActivationEnd) {
    
            console.log('This should only log once per route change, but logs three times.');
    
          };
      });
    
    }