web-dev-qa-db-ja.com

Angular 7-複数のコンセント:エラー:すでにアクティブになっているコンセントをアクティブにできません

Angular 7で発生している問題は次のとおりです。

2つのアウトレットがあります。メインアプリルーターアウトレットと、「administration」という名前のセカンダリアウトレットです。

最初に管理リンクをナビゲートしたい場合、それは正常に動作します。しかし、次回、ナビゲートしようとすると、angularがこのエラーメッセージをスローします。

エラー:すでにアクティブ化されているアウトレットをアクティブ化することはできません

だから、誰かが私に理由を説明できますか?フォーラムで解決策が見つかりません...

これがstackblitzです: https://stackblitz.com/edit/angular-osnnd4

皆さんありがとうございました:)

11
Anthony Coucke

この問題は、子ルートを遅延ロードするときに発生します。ルートを変更するたびに、コンセントを手動で無効にする必要があります。

AdministrationComponentを次の回避策に変更しました。 Angularが問題を解決する方法を持つまで、それは今のところ機能するはずです。

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

これはばかげているかもしれませんが、これに対する解決策を探している人にとっては:内部または子アウトレットのいずれにも未定義の変数がないことを確認してください。

私は自分のプロジェクトでこれを修正し、すべてが正常に戻りました。

7
B. León