On the controller, $ocLazyLoad and $injector must be passed, then get the lazy-loaded object via its name.
Root-Controller.ts:
module App.Root { export class Controller { constructor( public SweetAlert, public $state, public $ocLazyLoad, public $injector ) { this.$ocLazyLoad.load('/shared-state/AppWide.js').then(x => { var svc = this.$injector.get('someServiceNameHere'); this.SweetAlert.swal(svc.title); }); } } } angular .module('niceApp',<any> [ 'oitozero.ngSweetAlert', [ 'oitozero.ngSweetAlert.files' ] ]) .controller('RootController', [ 'SweetAlert', '$state', '$ocLazyLoad', '$injector', App.Root.Controller ]);
AppWide.ts:
module SharedState { export class AppWide { title : string; get isUploadVisible(): boolean { var theToken = this.$window.localStorage["theToken"]; return theToken !== undefined; } constructor(public $window: ng.IWindowService) { this.title = "This must be changed"; } } } angular.module('niceApp',[]) .service('someServiceNameHere', ['$window', SharedState.AppWide]);
The problem with the codes above, the controller has now a hard-dependency on $ocLazyLoad and $injector.
There's a nicer solution to the problem, just like SweetAlert, just wrap AppWide.ts to its own module, and make that new module a dependency module of niceApp module. Here's the configuration for AppWide.js:
$ocLazyLoadProvider.config({ debug: true, modules: [ { name: 'oitozero.ngSweetAlert.files', files: [ '/lib/angular-sweetalert/SweetAlert.js', '/lib/sweetalert/dist/sweetalert.min.js', '/lib/sweetAlert/dist/sweetalert.css' ] }, { name: 'common.appWide.files', files: [ '/shared-state/AppWide.js' ] } ] });
AppWide.ts:
module SharedState { export class AppWide { title : string; get isUploadVisible(): boolean { var theToken = this.$window.localStorage["theToken"]; return theToken !== undefined; } constructor(public $window: ng.IWindowService) { this.title = "This must be changed"; } } } angular.module('common.appWide',[]) .service('someServiceNameHere', ['$window', SharedState.AppWide]);
The controller is now free from $ocLazyLoad and $injector.
Root-Controller.ts:
module App.Root { export class Controller { constructor( public SweetAlert, public $state, public AppWide ) { this.SweetAlert.swal(this.AppWide.title); } } } angular .module('niceApp',<any> [ 'oitozero.ngSweetAlert', 'common.appWide', [ 'oitozero.ngSweetAlert.files', 'common.appWide.files' ] ]) .controller('RootController', [ 'SweetAlert', '$state', 'someServiceNameHere', App.Root.Controller ]);
Happy Lazy Loading!
No comments:
Post a Comment