Angular从5升级到6后调用BehaviorSubject的subscribe提示属性不存在如何解决
报错根因
该问题由Angular 6配套的RxJS 6+版本API不兼容升级导致:Angular 5默认使用RxJS 5.x版本,该版本BehaviorSubject采用分散子路径导入规则,而RxJS 6+调整为统一根路径导入,旧导入规则拿到的对象不存在标准subscribe方法。
修复方案
- 优先使用长期兼容写法:修正导入路径
将原分散子路径导入语句
替换为RxJS 6+统一的根路径导入即可import { BehaviorSubject } from 'rxjs/BehaviorSubject';
所有RxJS基础创建类均调整为从import { BehaviorSubject } from 'rxjs';rxjs根路径导入,操作符统一从rxjs/operators路径导入。 - 临时过渡方案:安装官方兼容包
若项目存量旧RxJS写法较多,暂时无法逐一调整,可安装RxJS官方向下兼容包,安装后原导入路径可直接生效npm install rxjs-compat --save - 排查异常覆盖问题
若调整导入后仍报错,按住Ctrl点击代码中的BehaviorSubject跳转到定义,确认是否被第三方包或者自定义的同名类型覆盖,确保引用的是RxJS包导出的原生类。
你的现有代码逻辑无语法问题,调整导入后即可正常运行:
变量定义代码:
private dictionarySubject: BehaviorSubject<Dictionary> = new BehaviorSubject<Dictionary>(null);
订阅逻辑代码:
public subscribe(callback: (dicoes: Dictionary) => void) { this.dictionarySubject .subscribe((dico) => { if (dico === null) { return; } callback(dico); }); }
内容的提问来源于stack exchange,提问作者Bhushan Khaladkar
相关产品推荐
相关产品推荐

