无法在 angular 中获取和设置 BehaviorSubject 的值

Cannot get and set value to BehaviorSubject in angular

我正在尝试向 BehaviorSubject 添加一个布尔值。但是,当我尝试控制台日志时,它说它是未定义的。我做错了什么?

我是这样声明的。

isDesktopWidth: BehaviorSubject<boolean>;

这就是我的使用方式

changeSideBarWidth() {
if (this.innerWidth > 767) {
  this.isDesktopWidth.next(true);
} else {
  this.isDesktopWidth.next(false);
}

}

然后在ngOnInit

this.changeSideBarWidth();
console.log(this.isDesktopWidth.value);

但它在控制台中没有显示任何内容。只有一个错误说

Cannot read property 'next' of undefined

您已经分配了变量的类型 isDesktopWidth 但还没有初始化它。尝试

isDesktopWidth = new BehaviorSubject<boolean>(false);

BehaviorSubject 需要用一个值初始化。如果您希望在没有初始值设定项的情况下创建,请使用 Subject。在那种情况下你可以使用

isDesktopWidth = new Subject<boolean>();

它们之间的另一个区别是 BehaviorSubject 持有一个值。因此,一旦您订阅它,它就会 return 它持有的当前值。 Subject 不保存当前值。当您订阅它时,您将不会收到一个值,直到它发出下一个值。

在未发射的 Subject 上使用 .value 属性 将 return undefined.