我遇到了同样的错误。对我来说,我尝试从 angularFire2/... 而不是 angularfire2/... 导入的文件中有一个错字,导致错误发生。
这是一个基本的 Angular Firestore 设置示例。
安装 angularfire2 和 firebase
npm install firebase angularfire2 --save
环境/environment.ts
export const environment = {
production: false,
firebase: { // add your api stuff here
apiKey: '<your-key>',
authDomain: '<your-project-authdomain>',
databaseURL: '<your-database-URL>',
projectId: '<your-project-id>',
storageBucket: '<your-storage-bucket>',
messagingSenderId: '<your-messaging-sender-id>'
}
}
app.module.ts
导入以及您导入的任何其他内容
// Firebase Modules
import { AngularFireModule } from 'angularfire2';
import { AngularFirestoreModule } from 'angularfire2/firestore';
import { AngularFireAuthModule } from 'angularfire2/auth';
// Auth Service
import { AuthService } from './services/auth.service';
// Environment with firebase api key
import { environment } from './../environments/environment';
模块导入和提供程序数组
imports: [
BrowserModule,
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule.enablePersistence(),
AngularFireAuthModule,
RouterModule.forRoot(appRoutes)
]
providers: [
AuthService,
]
您的 Firestore 身份验证服务
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { User } from './../../models/user.interface';
import * as firebase from 'firebase/app';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFirestore, AngularFirestoreDocument } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/switchMap';
@Injectable()
export class AuthService {
constructor (
private afAuth: AngularFireAuth,
private afs: AngularFirestore,
private router: Router
) { }
// Your authentication logic here.
}
最后但同样重要的是,确保您在 Firebase 控制台中正确设置了读写规则。并从 firebase 控制台启用一项或多项登录服务。
来自 console.firebase.google.com/project stuff/database/firestore/rules
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
之后,只需导入您的身份验证服务并将其传递到组件构造函数中,无论您需要使用身份验证服务。
当我遇到同样的错误时,这是因为从 angualrFire2 导入内容时出错。它在运行 ng serve 时也抛出了一个错误,表明该应用程序有多个模块,这些模块只是以防万一。意思是我试图从 angularfire2/... 和 angularFire2/... 导入希望你能找到你的错误。
只是一个简短的说明您还可以编写一个通用的 firestore 服务来处理您的应用程序的所有 crud 操作,其方式与我们创建自定义身份验证服务的方式类似。