javascript - 路由器事件在页面刷新时使某些功能失败
问题描述
我想在除主页之外的所有页面中显示 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>
推荐阅读
- python - 如何修改获取股票价格每日支点(高点/低点)的循环以获取每周?
- php - 无法通过社交登录对用户进行身份验证
- python - 如何在空文件上加载 json.load(filename)?
- azure - Microsoft Teams + Azure 机器人:间歇性错误 403“机器人不是对话名单的一部分”
- scala - 将 csv 读入带有时间列的 hdfs 不起作用
- android - Android Studio - 整个项目中的全局变量?
- python - 使用 feedparser 从博客中获取每个唯一项目。在 for 循环中检查列表成员资格不起作用
- ios - 哪个 AppStoreConnect 选项用于 IAP 提示 Jar
- c# - 如何在 C# 中生成条形码 pdf?
- jquery - 工具提示不出现或不消失