diff --git a/packages/store/src/components/ng-redux.ts b/packages/store/src/components/ng-redux.ts index 48d6b29d..e0005de1 100644 --- a/packages/store/src/components/ng-redux.ts +++ b/packages/store/src/components/ng-redux.ts @@ -52,7 +52,10 @@ export abstract class NgRedux implements ObservableStore { abstract provideStore: (store: Store) => void; // Redux Store methods - abstract dispatch: Dispatch; + abstract dispatch: ( + action: A, + outsideZone?: boolean, + ) => A; abstract getState: () => RootState; abstract subscribe: (listener: () => void) => Unsubscribe; abstract replaceReducer: (nextReducer: Reducer) => void; diff --git a/packages/store/src/components/root-store.ts b/packages/store/src/components/root-store.ts index e70809d5..b5eca97f 100644 --- a/packages/store/src/components/root-store.ts +++ b/packages/store/src/components/root-store.ts @@ -73,7 +73,10 @@ export class RootStore extends NgRedux { this.store!.replaceReducer(nextReducer); }; - dispatch: Dispatch = (action: A): A => { + dispatch: Dispatch = ( + action: A, + outsideZone: boolean = false, + ): A => { assert( !!this.store, 'Dispatch failed: did you forget to configure your store? ' + @@ -81,7 +84,7 @@ export class RootStore extends NgRedux { 'README.md#quick-start', ); - if (!NgZone.isInAngularZone()) { + if (!NgZone.isInAngularZone() && !outsideZone) { return this.ngZone.run(() => this.store!.dispatch(action)); } else { return this.store!.dispatch(action);