angular - Angular 8:嵌套服务依赖导致未定义
问题描述
我有一个单例服务 (A),它依赖于另一个单例服务 (B)。
在 A 的构造函数中,当我尝试获取 B 的属性时,我得到一个TypeError: this.B is undefined.
在 B 的构造函数中,我通过另一个服务进行后端调用。后端调用似乎导致某些东西中断或停止,并使 B 无法被其他服务文件识别。
代码示例:
// A Singleton Service. Relies on B.
@Injectable({
providedIn: 'root'
})
export class Aservice {
constructor(private service: Bservice) {
console.log('B isLoggedIn', this.service.isLoggedIn); // <-- triggers TypeError
}
}
// B Singleton Service
@Injectable({
providedIn: 'root'
})
export class Bservice {
isLoggedIn: boolean = false;
constructor(private service: Cservice) {
this.getData();
}
getData() {
this.service.getSomeObject().subscribe(
result => {
console.log('B got result', result);
},
err => {
console.error('B got ERROR', err);
}
);
}
}
// C Singleton Service
@Injectable({
providedIn: 'root'
})
export class Cservice {
constructor(private http: HttpClient) {}
getSomeObject() {
return this.http.get('my/api/path');
}
}
当然,我以更复杂的方式使用它,但我发现即使只是尝试从 A 访问 B 中定义的变量也会导致 TypeError。
这是出乎意料的,我无法弄清楚为什么this.B is undefined
。
解决方案
推荐阅读
- python - Python/Flask 应用程序的 Google Tasks API 设置帮助
- python - 使用队列的最低 k 个元素。实施未通过测试
- swift - Swift switch 语句中的字符串模式匹配
- mongodb - 对最后/第一个 X 文档进行分组的最佳方法
- python - python flake8 忽略 E501 和 max-line-length
- vue.js - 您如何在自定义组件中使用 buefy 的 b-taginput 使其像 v-model 一样工作,它只能以一种方式绑定?
- mule - 在 Mulesoft 4 中,如何让 http 侦听器接受所有传入消息,而不管路径如何?
- javascript - Firebase 函数 - 发送推送并收到错误消息“TypeError:无法将未定义或 null 转换为对象”
- microsoft-teams - 连接器保存时未调用 settings.getSettings() 回调
- javascript - 如何在 SweetAlert2 弹出窗口队列中使用 then()?