我想在主页以外的所有页面中显示Hamberger(菜单图标(。代码是:
constructor( private router: Router){
this.router.events
.subscribe((event) => {
let _url = window.location.href, urlArr: any;
console.log(_url);
urlArr = _url.split('/').indexOf('home');
this._showHamburger = (urlArr < 0) ? true : false;
});
}
如果我们从任何页面导航到当前页面,上面的代码工作正常(似乎我们必须从某个地方导航(。但是在页面刷新时,上述功能失败。我需要加起来的任何事情??
最好使用ActivatedRoute
服务:
constructor(private route: ActivatedRoute) {
route.url.pipe(
map((urls) => urls.every((url) => !url.path.includes('home'))
).subscribe((show: boolean) => this._showHamburger = show);
}
更好的方法是在没有订阅的情况下使用它,并在组件中使用async
管道。这将处理任何需要的取消订阅:
readonly showHamburger: Observable<boolean>;
constructor(private route: ActivatedRoute) {
this.showHamburger = route.url.pipe(
map((urls) => urls.every((url) => !url.path.includes('home'))
);
}
然后你可以像这样制作模板:
<div *ngIf="showHamburger | async" class="hamburger">I'm a hamburger</div>
我认为创建一个新组件是最好的主意
最好的方法是创建一个新组件并添加汉贝格的代码(菜单图标(
使用此创建新组件
ng g c Hamberger
在您想要的所有页面上使用像<app-hamberger></app-hamberger>
这样的选择器,并且不要在希望时添加它