<!DOCTYPE html>
<html>
<head>
<title>FancyGrid with Angular 2</title>
<script src="https://code.angularjs.org/2.0.0-beta.9/angular2-polyfills.js"></script>
<script src="https://code.angularjs.org/tools/system.js"></script>
<script src="https://code.angularjs.org/tools/typescript.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.9/Rx.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.9/angular2.min.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.9/http.min.js"></script>
<link href="https://code.fancygrid.com/fancy.min.css" rel="stylesheet">
<script src="https://code.fancygrid.com/fancy.min.js"></script>
<script>
System.config({
transpiler: 'typescript',
typescriptOptions: {
emitDecoratorMetadata: true
}
});
System.import('app.ts')
.catch(console.error.bind(console));
</script>
</head>
<body>
<my-app>
loading...
</my-app>
</body>
</html>
import {bootstrap} from 'angular2/platform/browser';
import {Component, NgZone, AfterView, OnDestroy} from 'angular2/core'
class Grid {
constructor(config: Object) {
for(var p in config){
this[p] = config[p];
}
}
}
@Component({
selector : 'fancygrid',
inputs : ['grid'],
template : `
<div id='{{grid.renderTo}}'></div>
`
})
class fancygrid implements AfterView, OnDestroy {
constructor(private zone:NgZone) {
}
ngAfterViewInit() {
this.zone.runOutsideAngular(() => {
var myGrid = new FancyGrid(this.grid);
});
}
ngOnDestroy() {
FancyGrid.get(this.grid['renderTo']).destroy();
}
}
//Root Component
@Component({
selector: 'my-app',
directives: [fancygrid],
template: `
<fancygrid [grid]='config'></fancygrid>
`,
})
export class App {
constructor() {
this.name = 'Angular2'
var data = [
['Ted', 'Smith', 'Java Developer', 'ted.smith@gmail.com', 'Electrical Systems', 30, 'Java, Ruby'],
['Ed', 'Johnson', 'C/C++ Market Data Developer', 'ed.johnson@gmail.com', 'Energy and Oil', 35, 'C++'],
['Sam', 'Williams', 'Technical Analyst', 'sam.williams@gmail.com', 'Airbus', 38, ''],
['Alexander', 'Brown', 'Project Manager', 'alexander.brown@gmail.com', 'Renault', 24, ''],
['Nicholas', 'Miller', 'Senior Software Engineer', 'nicholas.miller@gmail.com', 'Adobe', 33, 'Unix, C/C++'],
['Andrew', 'Thompson', 'Agile Project Manager', 'andrew.thompson@gmail.com', 'Google', 28, ''],
['Ryan', 'Walker', 'Application Support Engineer', 'ryan.walker@gmail.com', 'Siemens', 39, 'ActionScript']
];
this.config = {
title: 'Title',
renderTo: 'grid-1',
width: 450,
height: 400,
selModel: 'cell',
data: {
fields: ['name', 'surname', 'position', 'email', 'company', 'age', 'knowledge'],
items: data
},
defaults: {
type: 'string',
width: 100
},
columns: [{
index: 'company',
title: 'Company'
}, {
index: 'name',
title: 'Name'
}, {
index: 'surname',
title: 'Sur Name'
}, {
index: 'age',
title: 'Age',
width: 50,
type: 'number'
}]
};
}
}
bootstrap(App, [])
.catch(err => console.error(err));