Angular ngIf показывает шаблон в окне, затем удаляет из DOM - PullRequest
0 голосов
/ 24 августа 2018

корневой компонент

<div class="container">
  <div class="row">
    <ng-container *ngIf="router.url !== '/login'">
      <app-navbar></app-navbar>
    </ng-container>
  </div>
  <ng4-loading-spinner></ng4-loading-spinner>
  <router-outlet></router-outlet>
  <div class="col-xs-12  col-sm-12 col-md-12">
    <ng-container *ngIf="router.url !== '/login'">
      <app-footer></app-footer>
    </ng-container>
  </div>
</div>

Когда я проверяю, равняется ли router.url (маршрутизатор, введенный в машинный скрипт корневого компонента в конструкторе) ./login, тогда удаляется из DOM. Но angular показывает этот шаблон через 1-2 мс после загрузки страницы и затем удаляет из DOM. Но я не хочу видеть <app-navbar></app-navbar> и <app-footer></app-footer> .. enter image description here

1 Ответ

0 голосов
/ 24 августа 2018

Проблема в том, как вы получаете текущий маршрут. В последней версии angular Router не возвращает простой объект. Вместо этого он возвращает наблюдаемое с различными событиями перенаправления. Маршрутизатор не переходит непосредственно к целевому URL, он проходит по указанному пути для достижения целевого URL.

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

currentURL:any;

constructor(private router: Router){

   this.router.events.filter((res) => res instanceof NavigationEnd).subscribe((res) => {
      this.currentURL = this.router.url;   
   });

}

также импортируйте NavigationEnd поверх вашего кода

import { Router, NavigationEnd } from '@angular/router';

Приведенный выше код гарантирует, что вы получите только последний (целевой) URL-адрес всего цикла перенаправления.

...