Skip to content

Commit 17b32b5

Browse files
JiaLiPassionmhevery
authored andcommitted
fix(zone.js): hook should set correct current zone (#31642)
Close #31641 PR Close #31642
1 parent 29e1c53 commit 17b32b5

2 files changed

Lines changed: 26 additions & 8 deletions

File tree

packages/zone.js/lib/zone.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,47 +1021,49 @@ const Zone: ZoneType = (function(global: any) {
10211021
this._forkZS =
10221022
zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate !._forkZS);
10231023
this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate !._forkDlgt);
1024-
this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate !.zone);
1024+
this._forkCurrZone =
1025+
zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate !._forkCurrZone);
10251026

10261027
this._interceptZS =
10271028
zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate !._interceptZS);
10281029
this._interceptDlgt =
10291030
zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate !._interceptDlgt);
10301031
this._interceptCurrZone =
1031-
zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate !.zone);
1032+
zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate !._interceptCurrZone);
10321033

10331034
this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate !._invokeZS);
10341035
this._invokeDlgt =
10351036
zoneSpec && (zoneSpec.onInvoke ? parentDelegate ! : parentDelegate !._invokeDlgt);
1036-
this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate !.zone);
1037+
this._invokeCurrZone =
1038+
zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate !._invokeCurrZone);
10371039

10381040
this._handleErrorZS =
10391041
zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate !._handleErrorZS);
10401042
this._handleErrorDlgt = zoneSpec &&
10411043
(zoneSpec.onHandleError ? parentDelegate ! : parentDelegate !._handleErrorDlgt);
10421044
this._handleErrorCurrZone =
1043-
zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate !.zone);
1045+
zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate !._handleErrorCurrZone);
10441046

10451047
this._scheduleTaskZS =
10461048
zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate !._scheduleTaskZS);
10471049
this._scheduleTaskDlgt = zoneSpec &&
10481050
(zoneSpec.onScheduleTask ? parentDelegate ! : parentDelegate !._scheduleTaskDlgt);
1049-
this._scheduleTaskCurrZone =
1050-
zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate !.zone);
1051+
this._scheduleTaskCurrZone = zoneSpec &&
1052+
(zoneSpec.onScheduleTask ? this.zone : parentDelegate !._scheduleTaskCurrZone);
10511053

10521054
this._invokeTaskZS =
10531055
zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate !._invokeTaskZS);
10541056
this._invokeTaskDlgt =
10551057
zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate ! : parentDelegate !._invokeTaskDlgt);
10561058
this._invokeTaskCurrZone =
1057-
zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate !.zone);
1059+
zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate !._invokeTaskCurrZone);
10581060

10591061
this._cancelTaskZS =
10601062
zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate !._cancelTaskZS);
10611063
this._cancelTaskDlgt =
10621064
zoneSpec && (zoneSpec.onCancelTask ? parentDelegate ! : parentDelegate !._cancelTaskDlgt);
10631065
this._cancelTaskCurrZone =
1064-
zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate !.zone);
1066+
zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate !._cancelTaskCurrZone);
10651067

10661068
this._hasTaskZS = null;
10671069
this._hasTaskDlgt = null;

packages/zone.js/test/common/zone.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,22 @@ describe('Zone', function() {
4949
const zoneC = zoneB.fork({name: 'C'});
5050
zoneC.run(function() {});
5151
});
52+
53+
it('should send correct currentZone in hook method when in nested zone with empty implementation',
54+
function() {
55+
const zone = Zone.current;
56+
const zoneA = zone.fork({
57+
name: 'A',
58+
onInvoke: function(
59+
parentDelegate, currentZone, targetZone, callback, applyThis, applyArgs, source) {
60+
expect(currentZone.name).toEqual('A');
61+
return parentDelegate.invoke(targetZone, callback, applyThis, applyArgs, source);
62+
}
63+
});
64+
const zoneB = zoneA.fork({name: 'B'});
65+
const zoneC = zoneB.fork({name: 'C'});
66+
zoneC.run(function() {});
67+
});
5268
});
5369

5470
it('should allow zones to be run from within another zone', function() {

0 commit comments

Comments
 (0)