javascript - 在服务中可观察与仅使用 this.service Angular 7
问题描述
我已经看到 authServices 有一个布尔或用户对象和另一个带有 nav 的组件,它根据日志状态显示不同的按钮。
因此服务被注入到组件中,并在 authService 中创建了 observable,因此组件可以订阅布尔值。我的问题是为什么使用 observable 而不仅仅是使用已经注入的服务实例:
<nav>
<ul *ngIf="!this.authService.isAuth">
<li><a routerLink="/home">Home</a></li>
<li><a routerLink="/login">Login</a></li>
</ul>
</nav>
从已经注入的服务:
constructor(private authService: AuthService) {
}
我已经看到了组件订阅 auth 服务中的 observable 的示例,所以它就像:
isAuth: Observable<boolean> //in the authService
this.authService.isAuth.subscribe(x => this.isAuth= x)
当您可以使用第一种方式时,为什么要使用 observable 呢?
解决方案
在这里最好(最佳实践)使用 BehaviorSubject 而不在组件中订阅它
html
<ul *ngIf="!(isAuth | async)">
组件.ts
isAuth: Observable<boolean> = this.authService.isAuth;
推荐阅读
- python - 为什么在绘制 Pandas 箱线图时缺少列?
- image - 如何训练具有可变输出大小的对象检测模型?
- electron - electronjs BrowserView - 缓存持续多长时间?
- windows - 使用相同的 UDP 端口进行单播接收、多播发送
- vue.js - 使用父组件类设置Vue中的不同元素
- autodesk-forge - 是否可以在 Forge Viewer 中调用 IFC 类型的DESCRIPTION 值?
- python - OpenCV VideoWriter 对象在视频的某些部分速度很快
- rest - 如果资源实际上没有被删除,而只是用时间戳标记为已删除,我应该使用 DELETE 方法吗?
- c++ - 使用 glBlitFramebuffer 渲染灰度纹理
- typescript - 使用 typescript 向 AWS Elasticsearch Service 发出签名请求