我正在尝试使用BehaviorSubject
在角度应用中创建全局服务。
我在这个服务中创建了一个方法,我已经定义了一个HTTP get方法并加载了JSON文件。
现在我遇到的问题是当我在任何组件中将此BehaviourSubject
订阅为asObservable
并将结果分配给typescript文件中的特定变量时,HTML模板会呈现此值正确地通过结构化指令*ngFor
,但当我试图在打字稿文件中获得相同的值时,它不起作用。
例如;
当我尝试打印此值时
console.log(this.data.boxes.length);
然后它给了我一个错误
[错误类型错误:无法读取未定义的属性'长度'
当我试图打印这个没有长度的值时
console.log(this.data.boxes);
它在控制台面板中为我提供了一个正确的数组值。
现在如果我将BehaviorSubject
更改为Subject
,那么它的正常工作意味着我也获得了length
值。
但是,我想使用BehaviorSubject
代替Subject
。
我做错了什么,我该如何实现?
答案 0 :(得分:0)
即使在订阅之前没有调用下一个主题,行为主题也会向订阅者发送当前值,换句话说:
您的订阅在第一次" next"之前订阅了主题。值。我假设行为主题的初始值未定义或类似,因此发送给订阅者的第一个值导致错误。 你能否检查一下主题的声明,并确保初始值的形式正确,如:
public exampleSubject = new BeahviourSubject<yourType[]>(<yourType[]>[]);