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