Я обращаюсь к этому документу для изучения AngularFire
и он очень хорошо работает в Angular Component
.
Если я попытаюсь перейти в пользовательский класс (FirestoreService
, пожалуйста, посмотрите), возникнут ошибки.
FirebaseError: [code=invalid-argument]: ожидаемый первый аргумент функции Collection() будет CollectionReference, DocumentReference или FirebaseFirestore.
Я что-то забыл?
версия
"@angular/animations": "^18.0.0",
"@angular/cdk": "^18.0.1",
"@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0",
"@angular/fire": "^18.0.1",
"@angular/forms": "^18.0.0",
"@angular/material": "^18.0.1",
"@angular/platform-browser": "^18.0.0",
"@angular/platform-browser-dynamic": "^18.0.0",
"@angular/router": "^18.0.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.14.3"
app.config.ts
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideAnimationsAsync(),
provideFirebaseApp(() => initializeApp(environment.firebase)),
provideAuth(() => getAuth()),
provideFirestore(() => getFirestore()),
]
};
items.comComponent.ts
export class ItemsComponent {
items: Item[] = [];
constructor(private firestoreService: FirestoreService) {
firestoreService.items$.subscribe(items => {
this.items = items;
});
}
firestore.service.ts
import { Firestore, collectionData, collection } from '@angular/fire/firestore';
@Injectable({
providedIn: 'root'
})
export class FirestoreService {
items$: Observable<Item[]>;
private firestore: Firestore = Inject(Firestore);
constructor() {
const itemCollection = collection(this.firestore, 'items');
this.items$ = collectionData<Item>(itemCollection);
}
}
Я не уверен, что это проблема, но вам следует использовать inject
вместо Inject
из @anuglar/core
.
import { Firestore, collectionData, collection } from '@angular/fire/firestore';
@Injectable({
providedIn: 'root'
})
export class FirestoreService {
items$: Observable<Item[]>;
private firestore: Firestore = inject(Firestore); // <- changed here!
constructor() {
const itemCollection = collection(this.firestore, 'items');
this.items$ = collectionData<Item>(itemCollection);
}
}
ты прав, моя ошибка.