"错误TypeError:对象(...)不是函数"使用AngularFirestore和firebase

时间:2018-05-16 14:58:37

标签: angular firebase angularfire2

我想在我的应用中使用firebase和angularfire2,首先,我安装了它们,以及声明:

in environment.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",

我不知道为什么?

感谢您的帮助

8 个答案:

答案 0 :(得分:35)

AngularFire维护者在这里,我们向5.0 GA迈进了一些重大变化。为了支持Angular 6,AngularFire的最新版本需要rxjs 6.虽然降级或固定到旧版本可以用于快速和肮脏的修复,但我不建议这样做会因为它会让你无法改进未来的图书馆。

我建议将rxj6升级到版本6,如果您还有尚未升级的依赖项,请将let positiveAssertions = function(response) { expect(response.statusCode).equals(200); expect(response.body.refId.length == 36); expect(response.body.this1.length = 1); expect(response.body.that2.length = 2); expect(response.body.that3.length = 3); }; describe('my test 1', function() { it('response with email id reference expected', function(done) { request .post(messagingApiPath) .send(input) .expect((response) => positiveAssertions(response)) .end(done); }); }); 升级:

rxjs-compat

关注任何重大变化的重要信息,密切关注angularfire changelog;一旦我们达到GA,我们将遵守semver。

此处参考RXJS 5 => 6 migration guide

答案 1 :(得分:15)

我有同样的问题,但我解决了。你可以关注我的工作。这是离子的一个例子。

安装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://stackoverflow.com/a/50447449/6567753

答案 2 :(得分:11)

npm install rxjs@6 rxjs-compat@6

这解决了问题

答案 3 :(得分:6)

安装"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

答案 4 :(得分:0)

在版本前删除^这个。 就像这样。

{
    ...

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

答案 5 :(得分:0)

这是我的解决方案:

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

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

我首先使用:

卸载了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,所以我刚删除了那部分。