web-dev-qa-db-fra.com

Angular 7 - Plusieurs prises: erreur: impossible d'activer une prise déjà activée

Voici le problème que je rencontre avec Angular 7:

J'ai deux sorties: la sortie principale du routeur d'application et une sortie secondaire nommée "administration".

Lorsque je veux naviguer dans un lien d'administration au début, cela fonctionne bien. Mais la prochaine fois, lorsque j'essaierai de naviguer, angular lance ce message d'erreur:

Erreur: impossible d'activer une prise déjà activée

Alors, quelqu'un peut-il m'expliquer pourquoi? Je n'ai trouvé aucune solution sur les forums ...

Voici un stackblitz: https://stackblitz.com/edit/angular-osnnd4

Merci à tous :)

11
Anthony Coucke

Le problème se produit lors du chargement par lazylade des itinéraires enfants. Vous devez désactiver manuellement la sortie chaque fois que vous modifiez un itinéraire.

J'ai modifié votre composant d'administration pour contourner le problème comme suit. Il devrait pouvoir fonctionner pour l'instant, jusqu'à ce que Angular ait un moyen de résoudre le problème.

import { Component, OnInit, ViewChild } from '@angular/core';
import { RouterOutlet, Router, ActivationStart } from '@angular/router';

@Component({
  selector: 'app-administration',
  templateUrl: './administration.component.html',
  styleUrls: ['./administration.component.css']
})
export class AdministrationComponent implements OnInit {

  @ViewChild(RouterOutlet) outlet: RouterOutlet;

  constructor(
    private router: Router
  ) { }

  ngOnInit(): void {
    this.router.events.subscribe(e => {
      if (e instanceof ActivationStart && e.snapshot.outlet === "administration")
        this.outlet.deactivate();
    });
  }
}
14
Lee GuoHong

Cela peut être stupide, mais pour tous ceux qui recherchent une solution à cela: assurez-vous qu'il n'y a pas de variable indéfinie dans les sorties internes ou enfants.

J'ai corrigé cela dans mon projet et tout est revenu à la normale.

7
B. León