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
Popular Posts
1Z0-830 Java SE 21 Developer Certification
Azure AI Foundry Hello World
Azure AI Agent Hello World
Foundry vs Hub Projects
Build Agents with SDK
Bing Web Search Agent
Function Calling Agent
Spring Boot + Azure Key Vault Hello World Example
Spring Boot + Elasticsearch + Azure Key Vault Example
Spring Boot Azure AD (Entra ID) OAuth 2.0 Authentication
Deploy Spring Boot App to Azure App Service
Secure Azure App Service using Azure API Management
Deploy Spring Boot JAR to Azure App Service
Deploy Spring Boot + MySQL to Azure App Service
Spring Boot + Azure Managed Identity Example
Secure Spring Boot Azure Web App with Managed Identity + App Registration
Elasticsearch 8 Security - Integrate Azure AD OIDC