Skip to content

Commit

Permalink
refactor(ngUpgrade): Small cleanup with Testability API and resumeBoo…
Browse files Browse the repository at this point in the history
…tstrap

* With non-static ngUpgrade apps, callbacks to `whenStable` were being invoked with the wrong
  context
* With non-static ngUpgrade apps, `resumeBootstrap` was being run outside the NgZone
* Remove redundent `whenStableContext` variable

Neither of the above problems with non-static apps were actually causing bugs (as far as I know),
but they *might* have caused problems in the future.

Inspired by angular#12910, but for non-static apps.
  • Loading branch information
sjelin committed Nov 16, 2016
1 parent 481c9b3 commit 0ea0fc3
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 8 deletions.
6 changes: 2 additions & 4 deletions modules/@angular/upgrade/src/aot/upgrade_module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,16 +166,14 @@ export class UpgradeModule {
(testabilityDelegate: angular.ITestabilityService) => {
const originalWhenStable: Function = testabilityDelegate.whenStable;
const injector = this.injector;
// Cannot use arrow function below because we need to grab the context
// Cannot use arrow function below because we need the context
const newWhenStable = function(callback: Function) {
const whenStableContext: any = this;
originalWhenStable.call(this, function() {
const ng2Testability: Testability = injector.get(Testability);
if (ng2Testability.isStable()) {
callback.apply(this, arguments);
} else {
ng2Testability.whenStable(
newWhenStable.bind(whenStableContext, callback));
ng2Testability.whenStable(newWhenStable.bind(this, callback));
}
});
};
Expand Down
9 changes: 5 additions & 4 deletions modules/@angular/upgrade/src/upgrade_adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -355,14 +355,14 @@ export class UpgradeAdapter {
function(testabilityDelegate: angular.ITestabilityService) {

const originalWhenStable: Function = testabilityDelegate.whenStable;
const newWhenStable = (callback: Function): void => {
const whenStableContext: any = this;
// Cannot use arrow function below because we need the context
const newWhenStable = function(callback: Function) {
originalWhenStable.call(this, function() {
const ng2Testability: Testability = moduleRef.injector.get(Testability);
if (ng2Testability.isStable()) {
callback.apply(this, arguments);
} else {
ng2Testability.whenStable(newWhenStable.bind(whenStableContext, callback));
ng2Testability.whenStable(newWhenStable.bind(this, callback));
}
});
};
Expand Down Expand Up @@ -433,8 +433,9 @@ export class UpgradeAdapter {
if (windowAngular.resumeBootstrap) {
const originalResumeBootstrap: () => void = windowAngular.resumeBootstrap;
windowAngular.resumeBootstrap = function() {
let args = arguments;
windowAngular.resumeBootstrap = originalResumeBootstrap;
windowAngular.resumeBootstrap.apply(this, arguments);
ngZone.run(() => { windowAngular.resumeBootstrap.apply(this, args); });
resolve();
};
} else {
Expand Down

0 comments on commit 0ea0fc3

Please sign in to comment.