Angular2 upgradeAdapter does not work with $ rootScope, $ state, etc.

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?

+5
source share

Source: https://habr.com/ru/post/1245260/


All Articles