javascript - 基于路线的显示元素 - Angular
问题描述
我在尝试display:none
根据我想要的路线设置导航栏时遇到了很大的麻烦。我确实成功订阅了该路线,但我无法根据它关联它的显示。
到目前为止,我有这个:
export class AppComponent implements OnInit {
jwtHelper: JwtHelper = new JwtHelper();
public location = '';
constructor(private authService: AuthService, private router: Router, private http: Http) {
this.location = router.url;
this.router.events.subscribe((location) => {
console.log(location);
return true;
});
}
}
对于我的应用程序 component.ts
<div class="app-nav">
<!-- style="display:none; -->
<app-navbar></app-navbar>
</div>
<div class="container outlet">
<router-outlet></router-outlet>
</div>
和 html
选择<app-nav></app-nav>
器不能仅在 URL 为空(即'/'
路由)时出现,而必须在所有其他路由中都可用。有人能帮我吗?
解决方案
所以你基本上可以在这里利用 rxjs 的力量。
this.router.events
是一个事件流(称为 Observable)。我们可以获取流并将其 ( map
) 转换为布尔属性。然后我们*ngIf
在要切换的组件上设置一个,如下所示:
<app-nav *ngIf="showNav$ | async"></app-nav>
由于this.router.events
是一个流,每次它发出一个新值时,都会生成一个新的布尔值。html 模板中使用的流与async
管道一起使用,将布尔值解包到 html 中,它还会自动为您订阅和取消订阅。
一个完整的 stackblitz 在这里。
PS。顺便说一句,不要因为有人对你的问题投反对票而气馁,这种情况在这里发生得越来越频繁,没有解释为什么。我赞成你的问题,因为它很有意义,答案可以对其他人有所帮助。
推荐阅读
- c++ - 为什么允许我显式实例化模板特化,其中默认参数不能隐式转换为其他类型?
- javascript - 在 MVC 中的操作链接上打开一个弹出窗口
- javascript - 为什么不能在默认对象内导出函数
- android - 如何更改复选框背景颜色以匹配我的主题颜色?
- python - 如何在大散点图中标记点(~280k 点)
- javascript - 将对象推入数组失败
- three.js - 将 2D 屏幕点投影到 3D 世界点
- haskell - 为什么 putStrLn 可以看似改变 IO monad 中的预期类型?
- windows - dig-like functionality on windows?
- excel - excel vba找到具有特定值的列并复制以下值