
Depuis la mise à jour angular 15, nous avons une toute nouvelle façon de gérer les modules, et les non modules ahah.
Dans notre main.ts, maintenant, plus de AppModule : bonjour les provide functions.
Alors nous nous sommes dits : comme respecter ce principe et créer notre propre provide function ?!
Découvrons comment faire ensemble !
Un main.ts déjà bien rempli
Avec la standalone API, clairement le main.ts peut vite devenir une liste de providers, qui peut prendre de l’ampleur.
const providers: Array<Provider | EnvironmentProviders> = [
provideRouter(mainRoutes),
provideHttpClient(),
provideStore({ router: routerReducer}),
provideRouterStore(),
provideStoreDevtools({ maxAge: 25, logOnly: !isDevMode() }),
provideEffects(),
importProvidersFrom(BrowserAnimationsModule),
];
bootstrapApplication(AppComponent, { providers }).then(applicationLoaded);
Créer notre propre provide function
Dans notre exemple, nous voulons ajouter un token d’injection de dĂ©pendance, pour les paramĂštres d’accĂšs Ă Google API (pour notre calendrier).
Nous avons donc cherchĂ© dans le code Angular, et nous avons trouvĂ© le code d’un provider (par exemple provideHttpClient).
Il utilise la fonction makeEnvironmentProviders.
Il devient alors trĂšs facile de construire une provide function :
export const provideGoogleApis = (config: GoogleApiConfig) => {
const provider: Provider = [{
provide: googleApiConfigToken,
useValue: googleApiConfig
}];
return makeEnvironmentProviders(provider);
}
Nous utilisons ici le jeton d’injection suivant :
export const googleApiConfigToken = new InjectionToken<GoogleApiConfig>('Google api config');
export const googleApiConfig: GoogleApiConfig = {
client: client,
apiKey: key
};
Avec le type :
export type GoogleApiConfig = {
client: string,
apiKey: string
}
Appel dans notre main.ts
Il suffit d’appeler notre custom provide function dans notre main.ts standalone :
const providers: Array<Provider | EnvironmentProviders> = [
provideRouter(mainRoutes),
provideHttpClient(),
provideStore({ router: routerReducer}),
provideRouterStore(),
provideStoreDevtools({ maxAge: 25, logOnly: !isDevMode() }),
provideEffects(),
importProvidersFrom(BrowserAnimationsModule),
provideGoogleApis(googleApiConfig)
];
bootstrapApplication(AppComponent, { providers }).then(applicationLoaded);
Et voila ! đ
Yes, ça attire ta curiosité ?