使用 AngularFirestore 和 firebase 的“ERROR TypeError: Object(...) is not a function”

Posted

技术标签:

【中文标题】使用 AngularFirestore 和 firebase 的“ERROR TypeError: Object(...) is not a function”【英文标题】:"ERROR TypeError: Object(...) is not a function" using AngularFirestore and firebase 【发布时间】:2018-10-26 16:53:17 【问题描述】:

我想在我的应用程序中使用 firebase 和 angularfire2,首先,我安装了它们,并用于声明:

在环境.ts中

export const environment = 
    production: false,
    firebase: 
    apiKey: 'sfsdfdsff',
    authDomain: 'sfsdfdf',
    databaseURL: 'https://ng-sfsdfsf.firebaseio.com',
    projectId: 'ng-fitnesssfsdfdsf',
    storageBucket: 'ng-fsdfsdfsfdecff5.appspot.com',
   messagingSenderId: '21331323'
   
  ;

在 app.module.ts 中,导入:

AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule

在想要获取我的数据的组件中:

import  AngularFirestore  from 'angularfire2/firestore';

直到现在我还没有出错,但是当我想在构造函数中声明我的变量以使用它时:

constructor(private trainingService: TrainingService, private 
db:AngularFirestore)  

我有一个错误:

ERROR TypeError: Object(...) is not a function
at eval (firestore.js:28)
at ZoneDelegate.invoke (zone.js:388)
at Zone.run (zone.js:138)

在我的 package.json 中:

"angularfire2": "^5.0.0-rc.8.0",
"core-js": "^2.4.1",
"firebase": "^5.0.2",

我不知道为什么?

感谢您的帮助

【问题讨论】:

你找到解决办法了吗?我有同样的问题。 【参考方案1】:

这里是 AngularFire 维护者,我们在迈向 5.0 GA 时进行了许多重大更改。为了支持 Angular 6,AngularFire 的最新版本需要 rxjs 6。虽然降级或固定到旧版本可以快速而肮脏地修复,但我不建议这样做,因为它会让你无法改进未来。

如果您有尚未升级的依赖项,我建议将 rxj6 升级到版本 6 并包括 rxjs-compat

npm i rxjs@^6.0 rxjs-compat

密切关注angularfire changelog 以获取有关任何重大更改的重要信息;一旦我们达到 GA,我们将遵守 semver。

这里是RXJS 5 => 6 migration guide,供参考。

【讨论】:

这是我前两天在 angularfire 论坛上看到的内容。终于成功了! 既然这是一个正确的解决方案,为什么这个答案没有被选为正确的? 因为有时升级到 angular 6 根本不是一种选择(离子 3 和其他 angular5 依赖项)。生产库不应该有“重大”更改,应该创建一个单独的分支,James。 从来没有?我们必须进行更改以支持 RXJS 和 Angular,这有重大变化。我的意思是随意分叉所有这些库,毕竟它是开源的。 角度 7 怎么样【参考方案2】:

我有同样的问题,但我解决了。你可以关注我的作品。这是 ionic 的示例。

安装 rxjs

npm i rxjs@^6.0 rxjs-compat

将 rxjs-compact 导入文件

import  AngularFireDatabase, AngularFireList  from 'angularfire2/database';
import  Observable  from 'rxjs-compat';
import  map  from 'rxjs-compat/operators';

https://***.com/a/50447449/6567753

【讨论】:

【参考方案3】:
npm install rxjs@6 rxjs-compat@6

这解决了问题

【讨论】:

【参考方案4】:

我在安装"angularfire2": 5.0.0-rc.9 时遇到了同样的错误。

当我回滚到5.0.0-rc.6时,错误消失了。

npm install angularfire2@5.0.0-rc.6
npm install firebase@4.12.1

【讨论】:

你是怎么做到的。回滚? @Sodhisaab 卸载了 rc9 和 npm install angularfire2@^5.0.0-rc.6 并确保它与 firebase 4.12.1 兼容 你说的命令我已经试过了。但它安装了 ..rc.9 而不是 6. 是的。正如@James Daniels 所说,此修复程序将起作用。但通常情况并非如此。当没有机会实现时,这很好。 这行得通,但这太令人沮丧了。谢谢你的帮助haifzhan。【参考方案5】:

这是我的解决方案:

npm uninstall angularfire2
npm install angularfire2@5.0.0-rc.4
npm uninstall firebase
npm install firebase@4.8.0

【讨论】:

【参考方案6】:

去掉版本前面的^这个。 就这样吧。


    ...

    "angularfire2": "5.0.0-rc.6",
    "firebase": "4.12.1",

【讨论】:

【参考方案7】:

我遇到了同样的错误。一旦我用sudo npm update rxjs 更新了 rxjs。然后用sudo npm i rxjs@latest rxjs-compat 更新了 rxjs-compat。修复漏洞后运行ng build,然后运行ng serve。这解决了我的错误。 (在 macOS 上)

【讨论】:

【参考方案8】:

我首先卸载了firebase和angularfire2:

npm uninstall firebase npm uninstall angularfire2

然后重新安装:

npm install firebase@4.12.1 npm install angularfire2@5.0.0-rc.6

在实际安装的版本中使用^ angularfire2@5.0.0-rc.9 所以我只是删除了该部分。

【讨论】:

以上是关于使用 AngularFirestore 和 firebase 的“ERROR TypeError: Object(...) is not a function”的主要内容,如果未能解决你的问题,请参考以下文章

高级AngularFirestore2查询[重复]

无法解析 AngularFirestore 的所有参数:([object Object], ?)

python中怎么生成基于窗函数的fir滤波器

Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]

quartus FIR IP核使用 FIR II

IIR和FIR滤波