angular / angular/angularfire

Inject() must be called from an injection context such as a constructor in AngularFirestoreDoc after upgrading to Angular v19

Aperta
#3,621 24 commenti 3 reazioni 0 assegnatari Vedi su GitHub
comp: compat needs: investigation type: bug version: current (v17+)
Lingua principale
TypeScript
Stelle
7.8k
Fork
2.2k
Merge medio
22h 28m
PR unite (30g)
6

Descrizione

I recently upgraded all dependencies to Angular v19 (from v18). I was previously on Angular v18 where everything worked fine. However, now, my whole console is spammed with the following error:

```
ERROR RuntimeError: NG0203: inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`. Find more at https://angular.dev/errors/NG0203
at injectInjectorOnly (core.mjs:1104:11)
at ɵɵinject (core.mjs:1114:40)
at inject (core.mjs:1199:10)
at (angular-fire-compat-firestore.mjs:93:14)
at new AngularFirestoreDocument (angular-fire-compat-firestore.mjs:98:3)
at _AngularFirestore.doc (angular-fire-compat-firestore.mjs:621:12)
at auth.service.ts:38:14
at switchMap.js:16:17
at OperatorSubscriber2._this._next (OperatorSubscriber.js:14:9)
at Subscriber2.next (Subscriber.js:32:12)
```

However, my auth service at line 38:14 only has the following code:
``.doc(`users/${user.uid}`)``

The whole constructor looks like this (it is a angular service class)
```@Injectable({
providedIn: 'root',
})
export class AuthService {
isLoggedIn$: Observable;
/** User data of database */
user$: Observable;
userRoles$: Observable;
userId: string | undefined = undefined;
username: string | undefined = undefined;

constructor(
readonly firestore: AngularFirestore,
readonly fireAuth: AngularFireAuth,
readonly router: Router,
) {
this.user$ = this.fireAuth.authState.pipe(
switchMap((user) => {
if (user) {
this.userId = user.uid;
return this.firestore
.doc(`users/${user.uid}`)
.valueChanges()
.pipe(
map((userData) => {
if (userData) {
this.username = userData.username; // Assign username
}
return userData;
}),
);
} else {
this.userId = undefined;
this.username = undefined;
return new Observable((observer) => observer.next(null));
}
}),
);
```

But I dont really know, why it does not work anymore in angular 19.

My package dependencies:
```
"dependencies": {
"@angular/animations": "^19.1.5",
"@angular/cdk": "^19.1.3",
"@angular/common": "^19.1.5",
"@angular/compiler": "^19.1.5",
"@angular/core": "^19.1.5",
"@angular/fire": "^19.0.0",
"@angular/forms": "^19.1.5",
"@angular/material": "^19.1.3",
"@angular/platform-browser": "^19.1.5",
"@angular/platform-browser-dynamic": "^19.1.5",
"@angular/router": "^19.1.5",
"@fortawesome/angular-fontawesome": "^1.0.0",
"@fortawesome/free-brands-svg-icons": "^6.7.1",
"@fortawesome/free-regular-svg-icons": "^6.7.1",
"@fortawesome/free-solid-svg-icons": "^6.7.1",
"@ng-select/ng-select": "^14.2.2",
"@ngx-translate/core": "^15.0.0",
"@ngx-translate/http-loader": "^8.0.0",
"angular-build-info": "^2.0.1",
"canvas-confetti": "^1.9.3",
"flowbite": "^2.5.2",
"ng-recaptcha-2": "^15.0.2",
"ngx-editor": "^18.0.0",
"ngx-quill": "^27.0.0",
"quill": "^2.0.3",
"quill2-emoji": "^0.1.2",
"rxjs": "~7.8.0",
"tslib": "^2.8.1",
"tw-elements": "^2.0.0",
"zone.js": "^0.15.0"
},
```

I also tried to set "preserveSymlinks": false, in angular.json however, the issue still persists.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia con la chiamata in auth.service.ts alla riga 38 e seguila attraverso AngularFirestore.doc fino a angular-fire-compat-firestore.mjs, usando lo stack trace NG0203 come punto di ingresso. Confronta le versioni delle dipendenze riportate di Angular v19 e @angular/fire v19 e rivedi la discussione dell'issue per verificare se esiste una riproduzione o una risoluzione già stabilita. Il lavoro è completato quando l'errore del contesto di injection è spiegato e viene identificato un fix di compatibilità verificato o un passaggio successivo confermato da un maintainer.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
angular, firebase, typescript
Ambito
backend, databases
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Da chiarire
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.