Search code examples
angularnpmwebpacksystemjsangular-cli

How to implement ng2-ui (NPM package) using Angular CLI?


I wish to use the following NPM package with Angular CLI: ng2-ui

The implementation guide is for SystemJS, and not for Webpack, what is used by Angular CLI, what I have to use in this project.

What did I already do?

  • Installed the package by npm install ng2-ui --save
  • Added the following line to app.module.ts

    import { Ng2UIModule } from 'ng2-ui';
    
  • Added Ng2UIModule to the imports array in @NgModule.

By this point I didn't use Ng2UIModule in any of the components yet and before doing the mentioned operations the application worked just fine.

When I try to run the application by ng serve, I get the following error in console:

ERROR in [default] C:\tools\test-package.net\node_modules\ng2-ui\dist\index.d.ts:1:31
Cannot find module 'ng2-overlay'.

ERROR in [default] C:\tools\test-package.net\node_modules\ng2-ui\dist\index.d.ts:2:32
Cannot find module 'ng2-map'.

ERROR in [default] C:\tools\test-package.net\node_modules\ng2-ui\dist\index.d.ts:3:60
Cannot find module 'ng2-popup'.

ERROR in [default] C:\tools\test-package.net\node_modules\ng2-ui\dist\index.d.ts:4:39
Cannot find module 'ng2-scrollable'.

I guess the application simply lacks the following systemjs.config.js settings:

map['ng2-ui'] =  'node_modules/ng2-ui/dist';
packages['ng2-ui'] = {main: 'ng2-ui.umd.js', defaultExtension: 'js'}

Just I don't know how to make it work in the Angular CLI version of Webpack...

(Currently I use Angular CLI 1.0.0-beta.17)

Thanks for your help!


Solution

  • the ng2-ui has been changed to @ngui/overlay https://github.com/ng2-ui/overlay.

    Here is my sample code.

    ex.component.html

    <div id='div1' class='container row'>
      Div 1
    
    
    </div>
    
    <div id="overlay" ngui-overlay-of="div1" style='background-color:black'>
      Loading data......
    </div>
    
    <div id="overlay2" ngui-overlay-of="div1" style='background-color:blue'>
      Loading data......
    </div>
    
    <button (click)="showOverlay($event)" class='btn btn-success'>Show Overlay</button>
    <button (click)="hideOverlay()" class='btn btn-danger'>Hide Overlay</button>
    
    <br /><br />
    <button (click)="showOverlay2($event)" class='btn btn-success'>Show Overlay</button>
    <button (click)="hideOverlay2()" class='btn btn-danger'>Hide Overlay</button>

    ex.component.ts

    import { Component, OnInit } from '@angular/core';
    import { NguiOverlayManager } from '@ngui/overlay';
    @Component({
      selector: 'app-ex',
      templateUrl: './ex.component.html',
      styleUrls: [ './ex.component.css' ],
      providers:[NguiOverlayManager]
      
    })
    export class ExComponent implements OnInit {
    
      constructor(private overManager:NguiOverlayManager) { }
    
      ngOnInit() {
      }
    
      showOverlay(event: Event) { 
    
        this.overManager.open('overlay',event);
      }
    
      hideOverlay() { 
        this.overManager.close('overlay');
      }
    
      showOverlay2(event: Event) {
    
        this.overManager.open('overlay2', event);
      }
    
      hideOverlay2() {
        this.overManager.close('overlay2');
      }
    
    }

    Add import { NguiOverlayModule } from '@ngui/overlay'; to the module and add NguiOverlayModule to the imports array.