Angular2 PrimeNG Tutorial- Create a Hello World application using DataTable Grid.
In a previous post PrimeNG-UI Introduction we saw
created an application using various primeng components like dialogbox etc. In this tutorial we create an application using the
Data Table component.
In this post we develop a primeng application from scratch.
For this we will follow the steps-
- Before we start developing our application, we need to configure our development environment. We need node and npm installed for this tutorial.
- Create a project folder create a folder named as primeng.
-
Create and configure tsconfig.json which configures the TypeScript compiler.
{ "compilerOptions": { "target": "es5", "module": "commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "lib": [ "es2015", "dom" ], "noImplicitAny": false, "suppressImplicitAnyIndexErrors": true }, "exclude": [ "node_modules/*", "**/*-aot.ts" ] }
Create a javascript file named- systemjs.config.js which loads application and library module.
(function (global) { System.config({ paths: { 'npm:': 'node_modules/' }, map: { app: 'app', '@angular/core': 'npm:@angular/core/bundles/core.umd.js', '@angular/common': 'npm:@angular/common/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http/bundles/http.umd.js', '@angular/router': 'npm:@angular/router/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js', 'rxjs': 'npm:rxjs', 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js', 'primeng': 'npm:primeng' }, packages: { app: { main: './main.js', defaultExtension: 'js' }, rxjs: { defaultExtension: 'js' }, primeng: { defaultExtension: 'js' } } }); })(this);
{ "name": "primeng-datagrid", "version": "v1.0.0-SNAPSHOT", "scripts": { "start": "tsc && concurrently \"tsc -w\" \"lite-server\" ", "lite": "lite-server", "tsc": "tsc", "tsc:w": "tsc -w" }, "license": "ISC", "dependencies": { "@angular/common": "~2.2.0", "@angular/compiler": "~2.2.0", "@angular/core": "~2.2.0", "@angular/forms": "~2.2.0", "@angular/http": "~2.2.0", "@angular/platform-browser": "~2.2.0", "@angular/platform-browser-dynamic": "~2.2.0", "@angular/router": "~3.2.0", "angular-in-memory-web-api": "~0.1.15", "systemjs": "0.19.40", "core-js": "^2.4.1", "reflect-metadata": "^0.1.8", "rxjs": "5.0.0-beta.12", "zone.js": "^0.6.26", "primeng": "^1.0.0" }, "devDependencies": { "concurrently": "^3.1.0", "lite-server": "^2.2.2", "typescript": "^2.0.10", "@types/node": "^6.0.46" } }
npm install
-
employee.ts
export interface Employee { name?; empId?; city?; }
-
employeeService.ts
import {Injectable} from '@angular/core'; import {Http, Response} from '@angular/http'; import {Employee} from '../../app/employees/employee'; @Injectable() export class EmployeeService { constructor(private http: Http) {} getEmployeesMedium() { return this.http.get('app/employees-medium.json') .toPromise() .then(res => <Employee[]> res.json().data) .then(data => { return data; }); } }
-
employees-medium.json
{ "data":[ {"name":"javainuse1","empId":"J12","city":"city1"}, {"name":"javainuse2","empId":"J13","city":"city2"}, {"name":"javainuse3","empId":"J14","city":"city3"}, {"name":"javainuse4","empId":"J15","city":"city4"} ] }
-
Create Angular 2 component in TypeScript called app.component.ts. We create is a root component, called UserAppComponent.
import {Component} from '@angular/core'; import {Employee} from './employees/employee'; import {EmployeeService} from './employees/employeeservice'; class PrimeEmployee implements Employee { constructor(public name?, public empId?, public city?) {} } @Component({ templateUrl: 'app/app.component.html', selector: 'my-app' }) export class AppComponent { displayDialog: boolean; employee: Employee = new PrimeEmployee(); selectedEmployee: Employee; newEmployee: boolean; employees: Employee[]; constructor(private employeeService: EmployeeService) { } ngOnInit() { this.employeeService.getEmployeesMedium().then(employees => this.employees = employees); } showDialogToAdd() { this.newEmployee = true; this.employee = new PrimeEmployee(); this.displayDialog = true; } save() { if(this.newEmployee) this.employees.push(this.employee); else this.employees[this.findSelectedCarIndex()] = this.employee; this.employee = null; this.displayDialog = false; } delete() { this.employees.splice(this.findSelectedCarIndex(), 1); this.employee = null; this.displayDialog = false; } onRowSelect(event) { this.newEmployee = false; this.employee = this.cloneCar(event.data); this.displayDialog = true; } cloneCar(c: Employee): Employee { let employee = new PrimeEmployee(); for(let prop in c) { employee[prop] = c[prop]; } return employee; } findSelectedCarIndex(): number { return this.employees.indexOf(this.selectedEmployee); } }
-
Create the app.component.html file to display the employee grid information as follows-
<div> <p-dataTable [value]="employees" selectionMode="single" [(selection)]="selectedEmployee" (onRowSelect)="onRowSelect($event)" [paginator]="true" [rows]="10" [responsive]="true"> <header>Employee Management Service</header> <p-column field="name" header="name" [sortable]="true"></p-column> <p-column field="empId" header="empId" [sortable]="true"></p-column> <p-column field="city" header="city" [sortable]="true"></p-column> <footer><div class="ui-helper-clearfix" style="width:100%"><button type="button" pButton icon="fa-plus" style="float:left" (click)="showDialogToAdd()" label="Add"></button></div></footer> </p-dataTable> <p-dialog header="Employee Details" [(visible)]="displayDialog" [responsive]="true" showEffect="fade" [modal]="true"> <div class="ui-grid ui-grid-responsive ui-fluid ui-grid-pad" *ngIf="employee"> <div class="ui-grid-row"> <div class="ui-grid-col-4"><label for="name">name</label></div> <div class="ui-grid-col-8"><input pInputText id="name" [(ngModel)]="employee.name" /></div> </div> <div class="ui-grid-row"> <div class="ui-grid-col-4"><label for="empId">empId</label></div> <div class="ui-grid-col-8"><input pInputText id="brand" [(ngModel)]="employee.empId" /></div> </div> <div class="ui-grid-row"> <div class="ui-grid-col-4"><label for="city">city</label></div> <div class="ui-grid-col-8"><input pInputText id="brand" [(ngModel)]="employee.city" /></div> </div> </div> <footer> <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"> <button type="button" pButton icon="fa-close" (click)="delete()" label="Delete"></button> <button type="button" pButton icon="fa-check" (click)="save()" label="Save"></button> </div> </footer> </p-dialog> </div>
-
After we created our root component UserAppComponent along with its template, we need to tell angular to load it using Bootstrap using the following app.module.ts.
import {NgModule} from '@angular/core'; import {FormsModule} from '@angular/forms'; import {HttpModule} from '@angular/http'; import {BrowserModule} from '@angular/platform-browser'; import 'rxjs/add/operator/toPromise'; import {AppComponent} from './app.component'; import {EmployeeService} from './employees/employeeservice'; import {InputTextModule,DataTableModule,ButtonModule,DialogModule} from 'primeng/primeng'; @NgModule({ imports: [BrowserModule,FormsModule,HttpModule,InputTextModule,DataTableModule,ButtonModule,DialogModule], declarations: [AppComponent], bootstrap: [AppComponent], providers: [EmployeeService] }) export class AppModule { }
-
Finally bootstrap the AppModule we created above using the following main.ts.
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; import {AppModule} from './app.module'; platformBrowserDynamic().bootstrapModule(AppModule);
<html> <head> <title>PrimeNG Data Grid</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="node_modules/primeng/resources/themes/omega/theme.css" /> <link rel="stylesheet" type="text/css" href="app/resources/icons/css/font-awesome.min.css" /> <link rel="stylesheet" type="text/css" href="node_modules/primeng/resources/primeng.min.css" /> <!-- 1. Load libraries --> <!-- Polyfill(s) for older browsers --> <script src="node_modules/core-js/client/shim.min.js"></script> <script src="node_modules/zone.js/dist/zone.js"></script> <script src="node_modules/reflect-metadata/Reflect.js"></script> <script src="node_modules/systemjs/dist/system.src.js"></script> <!-- 2. Configure SystemJS --> <script src="systemjs.config.js"></script> <script> System.import('app').catch(function(err){ console.error(err); }); </script> </head> <!-- 3. Display the application --> <body> <my-app>Loading...</my-app> </body> </html>Now run the command-
npm start. The following browser will get started-
Click on any record to modify it.
Download Source Code
Download it - PrimeNG DataTable ExampleSee Also
PrimeNG-UI Components for AngularJS 2 Basic Example Creating a Simple AngularJS Application with ngRoute and Partials Removing the # from the AngularJS URL Use Google reCaptcha with AngularJS Use AngularJS NgCloak directives Example