Skip to content

Commit

Permalink
fix: assertInAngularZone should act as a noop
Browse files Browse the repository at this point in the history
  • Loading branch information
arturovt committed Apr 19, 2024
1 parent afae0ed commit c610b43
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 15 deletions.
20 changes: 6 additions & 14 deletions libs/single-spa-angular/src/single-spa-angular.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,12 @@ async function bootstrap(options: BootstrappedSingleSpaAngularOptions, props: an
return;
}

// In order for multiple Angular apps to work concurrently on a page, they each need a unique identifier.
options.zoneIdentifier = `single-spa-angular:${props.name || props.appName}`;

// This is a hack, since NgZone doesn't allow you to configure the property that identifies your zone.
// See https://github.com/PlaceMe-SAS/single-spa-angular-cli/issues/33,
// https://github.com/single-spa/single-spa-angular/issues/47,
// https://github.com/angular/angular/blob/a14dc2d7a4821a19f20a9547053a5734798f541e/packages/core/src/zone/ng_zone.ts#L144,
// and https://github.com/angular/angular/blob/a14dc2d7a4821a19f20a9547053a5734798f541e/packages/core/src/zone/ng_zone.ts#L257
options.NgZone.isInAngularZone = () => {
// @ts-ignore
return window.Zone.current._properties[options.zoneIdentifier] === true;
};
// Note that we have to make it a noop function because it's a static property and not
// an instance property. We're unable to configure it for multiple apps when dependencies
// are shared and reference the same `NgZone` class. We can't determine where this function
// is being executed or under which application, making it difficult to assert whether this
// app is running under its zone.
options.NgZone.assertInAngularZone = () => {};

options.routingEventListener = () => {
options.bootstrappedNgZone!.run(() => {
Expand Down Expand Up @@ -133,7 +127,6 @@ async function mount(

if (ngZoneEnabled) {
const ngZone: NgZone = ngModuleRefOrAppRef.injector.get(options.NgZone);
const zoneIdentifier: string = bootstrappedOptions.zoneIdentifier!;

// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()`
// function was not called.
Expand All @@ -142,7 +135,6 @@ async function mount(
}

bootstrappedOptions.bootstrappedNgZone = ngZone;
(bootstrappedOptions.bootstrappedNgZone as any)._inner._properties[zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOptions.routingEventListener!);
}

Expand Down
1 change: 0 additions & 1 deletion libs/single-spa-angular/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,4 @@ export interface BootstrappedSingleSpaAngularOptions extends SingleSpaAngularOpt
// `SingleSpaAngularOpts.NgZone` is a `noop` string and not an `NgZone` class.
bootstrappedNgZone?: NgZone;
routingEventListener?: () => void;
zoneIdentifier?: string;
}

0 comments on commit c610b43

Please sign in to comment.