I am trying to update an Angular1 application using Angular2 upgradeAdapter. The application loads with the upgradeAdapter adapter and works as expected, at least until I try to update one of the A1 integrated services.
Say I have this A1 service, written in typescript:
//A1.ts // inject decorator that in short does target.$inject = ...injects @Inject('$rootScope') class TestService{ constructor($rootScope: angular.IRootScopeService){ //$rootScope.whatever(); } } // register the service in application module globalModule.service('TestService', TestService);
I can give TestService the normal A1 path where I need it and it works.
Now for updating A2 I do:
//upgradeAdapter.ts import {UpgradeAdapter} from 'angular2/upgrade'; const upgradeAdapter = new UpgradeAdapter(); export default upgradeAdapter; //A2.ts import upgradeAdapter from './upgradeAdapter' import { Injectable, Inject} from 'angular2/core' @Injectable() export class A2TestService{ constructor(@Inject('$rootScope') _rootScope: angular.IRootScope){ //_rootScope.whatever() } } upgradeAdapter.upgradeNG1Provider('$rootScope'); // tried with additional upgradeAdapter.upgradeNG1Provider('$rootScopeProvider'); upgradeAdapter.addProvider(A2TestService); // make this service available in A1 World globalModule.service('A2TestService',upgradeAdapter.downgradeNG2Provider(A2TestService));
Hybrid DI works when upgrading using this formula, unless I use, for example, $rootScope
, as described above. Then i get
"Error during instantiation of $rootScope! (A2TestService -> $rootScope) Stacktrace: Type Error: Cannot read property 'get' of null at provider.push.core_1.provide.useFactory (upgrade.js: 684) ..."
outgoing from angular2.js (on beta.9)
What are my options here?
ch40s source share