Странное поведение в AngularFire

Я обращаюсь к этому документу для изучения 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);
    }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, что это проблема, но вам следует использовать 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);
    }
}

ты прав, моя ошибка.

CocoaUser 03.06.2024 08:41

Другие вопросы по теме