What this demonstrates

Two routed pages each mount a different explicit placeholder id. Because withRouterRefresh() is enabled, navigating between them tears down the departing page's placement and requests the arriving page's fresh — the flow a real single-page app relies on to refresh ads on route changes, with no full page reload.
Integration used on this page
// app.routes.ts — two pages, two ids
{ path: 'spa-a', component: SpaAComponent },
{ path: 'spa-b', component: SpaBComponent },

// app.config.ts — refresh ads on router navigation
provideEzoic({}, withRouterRefresh())

<!-- spa-a mounts [id]=922, spa-b mounts [id]=923 -->
<ezoic-ad [id]="922" [required]="true" [sizes]="['300x250', '336x280']" />

View source on GitHub →

SDK example source: @ezoic/angular-sdk (examples/site-demos) →