I have a app running AngularJS 1.5 and I'm trying to use NgUpgrade to start migrating old components to Angular.
My first step it's to have both frameworks running side by side. But when using NgUpgrade, I'm getting the following error:
Unhandled Promise rejection: [$injector:modulerr] Failed to instantiate module $$UpgradeModule due to:
Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:modulerr] Failed to instantiate module undefined due to:
Error: [ng:areq] Argument 'module' is not a function, got undefined
Basically I have an app.module.ts for Angular and app.js for AngularJS.
Following angular documentation, I created a main.ts to bootstrap both frameworks.
import { AppModule } from './app.module';
import { UpgradeModule } from '@angular/upgrade/static';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
console.log('Bootstrap both Angular and AngularJS ');
const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
upgrade.bootstrap(document.body, ['myApp'], {strictDi: true});
});
For creating my bundle, I'm using webpack.
Applications built with component directives are much easier to migrate to Angular than applications built with lower-level features like ng-controller , ng-include , and scope inheritance. Components are usually used as elements.
During the process of migration you will run both AngularJS and Angular in the same application, at the same time. This concept is known as dual booting, and in this lecture we will see how we can get both the legacy and modern Angular frameworks to co-exist and work together within the same application.
NgUpgrade is a library in Angular that allows us to upgrade our Angularjs (1.X) application to Angular gradually. It lets run Angular side-by-side along with AngularJs with breaking the application. You can install NgUpgrade using npm command npm install @angular/upgrade --save.
Business Benefits of Migrating from AngularJS to Angular Mobile-Driven Approach: Angular allows developers to build lightweight applications that offer faster downloads. And, this is one of the many reasons why Angular utilizes “lazy scripting”. This means that it would load particular modules only when needed.
This is the current state of our module. Most of the code is irrelevant to bootstrap both framework, since it's related with Redux. First, you need to remove the ng-app from the html and then inside of the constructor of the Module you need to call ngDoBootstrap() to bootstrap angular manually.
upgrade.bootstrap(document.body, ['app'], {strictDi: true}); will take care of bootstrapping your AngularJS application.
export class AppModule {
constructor(private ngRedux: NgRedux<any>, @Inject(DIGEST_MIDDLEWARE) digestMiddleware: any) {
const reducer = combineReducers({
actions: actionsReducer,
...coreReducers
});
const initialStete = {
actions: actionsInitialState,
...coreState
};
// digestMiddleware needs to be last, to support use in AngularJS 1.x
const store = createStore(reducer, initialStete, applyMiddleware(thunk, logger, digestMiddleware) );
ngRedux.provideStore(store);
}
ngDoBootstrap() {}
}
platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
const upgrade = platformRef.injector.get(UpgradeModule);
upgrade.bootstrap(document.body, ['app'], {strictDi: true});
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With