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;})代码>