DEV Community 👩‍💻👨‍💻

Cover image for Angular standalone router providers: an update
Ayyash
Ayyash

Posted on • Originally published at garage.sekrab.com

Angular standalone router providers: an update

Since standalone is still in preview, the documentation gives you no hints. You have to excavate to find some. On medium, Andrew Scott blogged about advancements made by Angular team on the router, when in standalone.

Alternative to importProvidersFrom

In our previous attempt to tear down the AppModule, the main.ts was rewritten

// main.ts bootstrap passing all providers from an existing NgModule
// using importProvidersFrom
bootstrapApplication(AppComponent, {
  providers: [
    importProvidersFrom(RouterModule.forRoot(AppRoutes)),
  ],
});
Enter fullscreen mode Exit fullscreen mode

The new proposed way is to use RouterModule

// new way with providerRouter in main.ts
bootstrapApplication(AppComponent, {
  providers: [
    provideRouter(appRoutes),
  ]
});
Enter fullscreen mode Exit fullscreen mode

Rewriting our App Routes with options

Let's revisit our app.route in StackBlitz project and rewrite it.

// app.route rewriting the router providers using provideRouter
export const AppRouteProviders = [
  provideRouter(AppRoutes,
    // this is in place of scrollPositionRestoration: 'disabled',
    withInMemoryScrolling({
      scrollPositionRestoration: 'disabled',
    }),
    // in place of initialNavigation: 'enabledBlocking'
    withEnabledBlockingInitialNavigation(),
    // same configuration
    withRouterConfig({
      paramsInheritanceStrategy: 'always',
      onSameUrlNavigation: 'reload'
    }),
    // in place of  preloadingStrategy: PreloadService,
    withPreloading(PreloadService),
  ),
  // ...
];
Enter fullscreen mode Exit fullscreen mode

Bundle sizes

The article claims that when not using the sub features of the router, treeshaking should result in reduction in bundle size. I could not reproduce that. As a matter of fact, the provideRouter almost always generated a slightly larger main bundle. The lazy loaded and common bundles were not affected.

Donno. You be the judge.

RESOURCES

Top comments (0)

We are hiring! Do you want to be our Senior Platform Engineer? Forem is hiring a Senior Platform Engineer

If you're interested in ops and site reliability and capable of dipping in to our Linux stack, we'd love your help shoring up our systems!