【发布时间】:2020-11-23 20:04:31
【问题描述】:
在 Angular 中,直接访问 BehaviorSubject 的 getValue() 与使用订阅和更新(本地?)变量以在 *ngIf 中使用相比有什么缺点?
在共享服务中:
currentState : BehaviorSubject<string> = new BehaviorSubject<string>(null);
在使用共享服务的 UI .ts 文件中:
constructor (public myservice : SharedService) { };
在 UI .html 文件中,仅在服务初始化后显示:(如果我不这样做,其中的内容将获得 currentState 的空引用:
*ngIf="myservice.currentState.getValue() != null"
或者,订阅,更新一个局部变量,并使用它来代替 myservice.getValue()。我确定有人会问,如果我要这样做,为什么还要使用 BehaviorSubject,但如果有人想在服务的价值发生变化时得到通知,他们可以这样做。有点像“如果你想要的话,基于事件的服务是可用的”,但也是基于当前用例的“如果你想要就自己访问”界面?
我做错了吗?我是使用behavioursubject的值来控制UI,所以需要使用ngIf。
【问题讨论】:
-
两者都是不好的做法。请改用
| async管道。 -
@pascalpuetz 对不起,让我澄清一下,问题的哪一部分 | async 为我解决,对我来说是一个更好的问题 - 空引用问题?
-
我用一个例子回答了这个问题。我将在几秒钟内添加解释为什么会更好。