Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ngIf在窗口上显示模板,然后从DOM中删除_Angular_Angular6_Angular Ng If - Fatal编程技术网

Angular ngIf在窗口上显示模板,然后从DOM中删除

Angular ngIf在窗口上显示模板,然后从DOM中删除,angular,angular6,angular-ng-if,Angular,Angular6,Angular Ng If,根组件 <div class="container"> <div class="row"> <ng-container *ngIf="router.url !== '/login'"> <app-navbar></app-navbar> </ng-container> </div> <ng4-loading-spinner></ng4-loading-sp

根组件

<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>


问题在于您获取当前路线的方式。在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。

可能让代码中的某些内容为您执行此检查,并将结果分配给将在ngIf中使用的变量,但默认为false,以便仅当某些内容将其更改为true时才会显示。在没有看到其他代码/路由的情况下,这只是一个如何提供帮助的想法。请尝试使用
*ngIf=“router?”url?&&router.url!='/login'
?感谢您的回答。我会将此添加到模板中,使用
*ngIf=“currentURL&¤tURL!='/login'
,否则,回答很好。谢谢您的回答。。Angular6的正确语法是<代码>this.router.events.pipe(筛选器(res=>res instanceof NavigationEnd)).subscribe(()=>{this.currentURL=this.router.url;})