Angular hat die inject()Funktion in neueren Versionen eingeführt, die es uns ermöglicht, auf funktionale Weise einen Verweis auf einen Anbieter zu erhalten, anstatt die Injector.get()Methode zu verwenden. Wenn Sie es jedoch oder eine Bibliothek, die es unter der Haube verwendet, verwendet haben, ist möglicherweise der folgende Fehler aufgetreten:
inject() must be called from an injection context
such as a constructor, a factory function, a field initializer,
or a function used with `runInInjectionContext`.
injectorAngular verfügt über zwei globale Variablen, die zu einem bestimmten Zeitpunkt eine enthalten können : eine für an Injectorund eine für NodeInjector. Hier sind die Codeausschnitte für beide:
let _currentInjector = undefined;
export function getCurrentInjector() {
return _currentInjector;
}
export function setCurrentInjector(injector: Injector|undefined|null {
const former = _currentInjector;
_currentInjector = injector;
return former;
}
let _injectImplementation
export function getInjectImplementation() {
return _injectImplementation;
}
export function assertInInjectionContext(debugFn: Function): void {
if (!getInjectImplementation() && !getCurrentInjector()) {
throw new RuntimeError(
RuntimeErrorCode.MISSING_INJECTION_CONTEXT,
ngDevMode &&
(debugFn.name +
'() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`'));
}
}
import {
ElementRef,
assertInInjectionContext,
inject,
} from '@angular/core';
export function injectNativeElement<T extends Element>(): T {
assertInInjectionContext(injectNativeElement);
return inject(ElementRef).nativeElement;
}
factoryfür an angegebenen Funktion InjectionToken:export const FOO = new InjectionToken('FOO', {
factory() {
const value = inject(SOME_PROVIDER);
return ...
},
});
@Component({
providers: [
{
provide: FOO,
useFactory() {
const value = inject(SOME_PROVIDER);
return ...
},
},
]
})
export class FooComponent {}
@Component({})
export class FooComponent {
foo = inject(FOO);
constructor(private ngZone: NgZone = inject(NgZone)) {
const bar = inject(BAR);
}
}
runInInjectionContext:import { runInInjectionContext } from '@angular/core';
export class FooComponent {
ngOnInit() {
runInInjectionContext(this.injector, () => {
console.log(
'I can access the NodeInjector using inject()',
inject(ElementRef)
);
})
}
Folgen Sie mir auf Medium oder Twitter, um mehr über Angular und JS zu erfahren!
Begeben Sie sich auf eine spannende Reise voller Innovation und Erfolg und erschließen Sie das ungenutzte Potenzial dieser überraschenden No-Code-Plattformen. Lassen Sie mich eine Geschichte über Sapna erzählen, eine bemerkenswerte Unternehmerin.
Diese Woche erhielt ich eine E-Mail von einem Mitglied der täglichen E-Mail-Liste. Sie wollten wissen: Welche Ressourcen besuchen Sie täglich, wöchentlich und monatlich? Tolle Frage! Ich versuche gerne, einige Einblicke in meinen Arbeitsablauf und die wichtigsten Ressourcen, die ich verwende, mit Ihnen zu teilen.
Von Alyson Lee, geschäftsführende Beraterin für Regierungsangelegenheiten Der jährliche Bewilligungsprozess der Bundesregierung ist von zentraler Bedeutung für unsere Bemühungen zur Finanzierung der Kohlendioxidentfernung (CDR). Jedes Jahr reicht Carbon180 Anfragen an verschiedene Kongressbüros ein, um zu bestimmen, wohin die Dollars im nächsten Jahr fließen werden.
Es war nach Mitternacht, als Hayden Katie nach ihrem gemeinsamen Abend zurück in ihren Studentenwohnheim fuhr. Sie hatte morgens einen frühen Unterricht und hatte keine Kleidung mehr zum Wechseln, nachdem sie die Nacht zuvor bei ihm übernachtet hatte.
Gestern haben wir die Tür zum diesjährigen Eurovision Song Contest mit einem glitzernden, chaotischen großen Finale geschlossen, bei dem die schwedische Sängerin Loreen die Trophäe mit nach Hause nahm. Sie war damit die erste Frau, die zweimal gewann, und holte die Krone 50 Jahre nach dem Gewinn des Wettbewerbs durch ABBA zurück nach Schweden mit „Waterloo“. Sie entwickelten sich zu einem der größten Acts im Kanon der Popmusik.
Um Unklarheiten zu vermeiden, werden die folgenden Begriffe verwendet: Authentifikator; Das Mobiltelefon, das für die Anmeldung verwendet wird. Website; Die Website oder Anwendung, die der Benutzer verwendet, um den Anmeldeanforderungsdienst zu stellen; Der Anbieter, der die jeweilige Dienstleistung bereitstellt, z