77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google Inc. All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | 
 | ||
|  | import {Inject, Injectable, NgModule} from '@angular/core'; | ||
|  | import {downgradeInjectable} from '@angular/upgrade/static'; | ||
|  | import * as ng from '../../../src/common/src/angular1'; | ||
|  | /* | ||
|  |  * This mock application code contains the following services and their dependencies: | ||
|  |  * | ||
|  |  * shoppingCart (AngularJS) | ||
|  |  *   -> Inventory (Angular - downgraded) | ||
|  |  *      -> serverRequest (AngularJS - upgraded) | ||
|  |  *         -> Logger (Angular - downgraded) | ||
|  |  * | ||
|  |  * This allows us to test two scenarios: | ||
|  |  *  * AngularJS -> Angular -> AngularJS | ||
|  |  *  * Angular -> AngularJS -> Angular | ||
|  |  */ | ||
|  | 
 | ||
|  | /* START: Angular bits */ | ||
|  | @Injectable() | ||
|  | export class Logger { | ||
|  |   warn() {} | ||
|  | } | ||
|  | 
 | ||
|  | @Injectable() | ||
|  | export class Inventory { | ||
|  |   constructor(@Inject('serverRequest') public serverRequest: any) {} | ||
|  | } | ||
|  | 
 | ||
|  | export function serverRequestFactory(i: ng.IInjectorService) { | ||
|  |   return i.get('serverRequest'); | ||
|  | } | ||
|  | 
 | ||
|  | @NgModule({ | ||
|  |   providers: [ | ||
|  |     Logger, | ||
|  |     Inventory, | ||
|  |     {provide: 'serverRequest', useFactory: serverRequestFactory, deps: ['$injector']}, | ||
|  |   ] | ||
|  | }) | ||
|  | export class AppModule { | ||
|  | } | ||
|  | /* END: Angular bits */ | ||
|  | 
 | ||
|  | /* START: AngularJS bits */ | ||
|  | export const serverRequestInstance: {logger?: Logger} = {}; | ||
|  | export const shoppingCartInstance: {inventory?: Inventory} = {}; | ||
|  | 
 | ||
|  | export function defineAppModule() { | ||
|  |   ng.module_('app', []) | ||
|  |       .factory('logger', downgradeInjectable(Logger)) | ||
|  |       .factory('inventory', downgradeInjectable(Inventory)) | ||
|  |       .factory( | ||
|  |           'serverRequest', | ||
|  |           [ | ||
|  |             'logger', | ||
|  |             function(logger: Logger) { | ||
|  |               serverRequestInstance.logger = logger; | ||
|  |               return serverRequestInstance; | ||
|  |             } | ||
|  |           ]) | ||
|  |       .factory('shoppingCart', [ | ||
|  |         'inventory', | ||
|  |         function(inventory: Inventory) { | ||
|  |           shoppingCartInstance.inventory = inventory; | ||
|  |           return shoppingCartInstance; | ||
|  |         } | ||
|  |       ]); | ||
|  | } | ||
|  | /* END: AngularJS bits */ |