-
-
Notifications
You must be signed in to change notification settings - Fork 120
HOWTO Step by Step
Install the Angular-Slickgrid
, jQuery 3.x
, Bootstrap
and Font-Awesome
NPM packages with
(Bootstrap, Font-Awesome are optional, you can choose other lib if you wish)
npm install --save angular-slickgrid jquery bootstrap font-awesome
# or with yarn add
ngx-translate
is now optional as of version 2.10.0
, see more info below at step 5
If you are facing any issue with ngx-translate
library while building your Angular Project. You need to make sure @ngx-translate/core
is part of your dependencies, even if you just use 1 Locale, because it is a peerDependency
of Angular-Slickgrid (we use @Optional() TranslateService
in the lib and for that to work, we still need it to be installed, but don't worry it should be removed by tree shaking process after a running a build). See their version compatibility table below
Angular Version | @ngx-translate/core |
---|---|
10 | 13.x+ |
9 | 12.x+ |
8 | 12.x+ |
7 | 11.x+ |
Then modify your angular.json
file with the following Styles and Scripts:
Note: The Scripts
section includes every single controls/plugins, however if you wish to exclude some of them since you might never use some functionalities then just don't include them (for example if you never want to use the column picker, then just delete the slick.columnpicker.js
file from the Scripts
list).
Note 2: Flatpickr is used by the date inline editor. If you are not planning to use it, you can skip including flatpickr.css
in your styles
.
Note 3: Multiple-Select.js is a customized version of the original. Couple of small options were added to suit Angular-SlickGrid needs, which is why it points to angular-slickgrid/lib
folder. This lib is required if you plan to use multipleSelect
or singleSelect
Filters (see Wiki - Filter).
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.css",
"node_modules/font-awesome/css/font-awesome.css",
"node_modules/flatpickr/dist/flatpickr.css",
"node_modules/angular-slickgrid/lib/multiple-select/multiple-select.css",
"styles.css"
],
"scripts": [
"node_modules/jquery/dist/jquery.js",
"node_modules/jquery-ui-dist/jquery-ui.min.js",
"node_modules/slickgrid/lib/jquery.event.drag-2.3.0.js",
"node_modules/bootstrap/dist/js/bootstrap.js",
"node_modules/angular-slickgrid/lib/multiple-select/multiple-select.js"
],
With the addition of Excel Export, you need to modify your tsconfig.app.json
and add the following line. If you forget to do this then your Angular Build will fail with a jszip
error. This lib is a used by the Excel Export and it seems that the Build has some problems finding the correct path unless we tell it where to find it.
"compilerOptions": {
// ...
"paths": {
"jszip": ["../node_modules/jszip/dist/jszip.min.js"]
}
},
Bootstrap 4 doesn't require the bootstrap.css
since it uses SASS, so you can remove that line. So from the previous code, just remove this line (as this is only for BS3)
"node_modules/bootstrap/dist/css/bootstrap.css",
Load the default Bootstrap theme style and/or customize it to your taste (customization requires SASS)
Default compiled css
(if you use the plain Bootstrap Theme CSS, you could simply add it to your .angular-cli.json
file and be done with it).
Note: If you are also using Bootstrap-SASS
, then there is no need to include the bootstrap.css
in the styles: []
section.
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.css",
"node_modules/font-awesome/css/font-awesome.css",
"styles.css",
"node_modules/angular-slickgrid/styles/css/slickgrid-theme-bootstrap.css"
],
You could also compile the SASS files with your own customization, for that simply take any of the _variables.scss (without the !default
flag) variable file and make sure to import the Bootstrap Theme afterward. For example, you could modify your style.scss
with the following changes:
/* for example, let's change the mouse hover color */
$cell-odd-background-color: lightyellow;
$row-mouse-hover-color: lightgreen;
/* make sure to add the @import the SlickGrid Bootstrap Theme AFTER the variables changes */
@import '../node_modules/angular-slickgrid/styles/sass/slickgrid-theme-bootstrap.scss';
Include AngularSlickgridModule
in your App Module (app.module.ts)
Note
Make sure to add the forRoot
since it will throw an error in the console when not provided.
import { AngularSlickgridModule } from 'angular-slickgrid';
@NgModule({
declarations: [AppComponent],
imports: [ AngularSlickgridModule.forRoot() ], // forRoot() is required, it won't work without it
bootstrap: [AppComponent]
})
export class AppModule { }
The new updated version of ng-packagr
use strict metadata and you might get errors about Lambda not supported
, to bypass this problem you can add the @dynamic
over the @NgModule
as so:
// @dynamic
@NgModule({
...
})
And finally use it your code, for example let's create a grid-basic.component.html
example.
<div class="container">
<angular-slickgrid gridId="grid1"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
[dataset]="dataset">
</angular-slickgrid>
</div>
If you don't want to use any Translate Service and use only 1 Locale then take a look at this demo
To provide locales other than English (default locale), you have 2 options that you can go with. If you only use English, there is nothing to do (you can still change some of the texts in the grid via option 1.)
- Using Custom Locale, that is when you use only 1 locale (other thank English)... this is a new feature starting from version
2.10.0
and up. - Using Localization with I18N, that is when you want to use multiple locales dynamically.
Also note that every time you want to use a translation key, you simply have to use a property with the Key
suffix. For example if you wish to have a column definition name
with a translation, just use the nameKey: 'TRANSLATE_KEY'
. Here's a list of keys that can be used in the lib
without Translate | with Translate |
---|---|
name | nameKey |
label | labelKey |
title | titleKey |
columnGroup | columnGroupKey |
optionTitle | optionTitleKey |
If you use multiple locale, you will also need to import necessary Flatpickr Locale, for more info see this Flatpickr Localization Wiki
and then configure the Column Definitions, Grid Options and pass a Dataset to the grid:
import { Column, GridOption } from 'angular-slickgrid';
export class GridBasicComponent {
columnDefinitions: Column[] = [];
gridOptions: GridOption = {};
dataset: any[] = [];
constructor() {
this.prepareGrid();
}
prepareGrid() {
this.columnDefinitions = [
{ id: 'title', name: 'Title', field: 'title', sortable: true },
{ id: 'duration', name: 'Duration (days)', field: 'duration', sortable: true },
{ id: '%', name: '% Complete', field: 'percentComplete', sortable: true },
{ id: 'start', name: 'Start', field: 'start' },
{ id: 'finish', name: 'Finish', field: 'finish' },
];
this.gridOptions = {
enableAutoResize: true,
enableSorting: true
};
// fill the dataset with your data
this.dataset = [ /** ...your data... **/ ];
}
}
The last step is really to explore all the pages that are available in this Wiki, all the documentation will be place in here and so you should visit it often. For example a good starter is to look at the following
- all the
Grid Options
you can take a look at, Wiki - Grid Options - Formatters
- Editors
- Filters
- Grid Menu ... and much more, just explorer the Wikis through the sidebar index (on your right)
You might notice that all demos are made with mocked dataset that are embedded in each examples, that is mainly for demo purposes, but you might be wondering how to connect this with an HttpClient
? Easy... just replace the mocked data, assigned to the dataset
property, by your HttpClient
call and that's it. The dataset
property can be changed at any time, which is why you can use local data and/or connect it to a Promise
or an Observable
with HttpClient
(internally it's just a SETTER that refreshes the grid). See Example 24 for a demo showing how to load a JSON file with HttpClient
.
The best way to get started is to clone the Angular-Slickgrid-demos, it has multiple examples and it is also updated frequently since it is used for the GitHub Bootstrap 4 demo page. Angular-Slickgrid
has 3 Bootstrap
repos, you can see a demo of each ones below.
-
Bootstrap 4 demo / examples repo (using
ngx-translate
)-
Bootstrap 4 - examples repo (without using
ngx-translate
)
-
Bootstrap 4 - examples repo (without using
- Bootstrap 5 repo (no live demo)
What if Angular-Slickgrid
is missing feature(s) versus the original SlickGrid
? Fear not and directly use the SlickGrid
and DataView
objects that are expose from the start through Event Emitters. For more info continue reading on Wiki - SlickGrid & DataView objects and Wiki - Grid & DataView Events
You might also get warnings about SlickGrid while doing a production build, most of them are fine and the best way to fix them, is to simply remove/ignore the warnings, all you have to do is to add a file named ngcc.config.js
in your project root (same location as the angular.json
file) with the following content (you can also see this commit which fixes the Angular-Slickgrid-Demos prod build):
module.exports = {
packages: {
'angular-slickgrid': {
ignorableDeepImportMatchers: [
/slickgrid\//,
/flatpickr/,
/jquery-ui-dist\//,
]
},
}
};
You should also add Angular-Slickgrid
as an allowed CommonJS dependency to your angular.json
file to silent the warnings.
"options": {
"allowedCommonJsDependencies": ["angular-slickgrid"]
}
Contents
- Angular-Slickgrid Wiki
- Installation
- Styling
- Interfaces/Models
- Testing Patterns
- Column Functionalities
- Global Grid Options
- Localization
- Events
- Grid Functionalities
- Auto-Resize / Resizer Service
- Resize by Cell Content
- Composite Editor
- Context Menu
- Custom Tooltip
- Add/Delete/Update or Highlight item
- Dynamically Change Row CSS Classes
- Excel Copy Buffer
- Export to Excel
- Export to File (CSV/Txt)
- Grid State & Presets
- Grouping & Aggregators
- Row Detail
- SlickGrid Controls
- SlickGrid Plugins
- Pinning (frozen) of Columns/Rows
- Tree Data Grid
- SlickGrid & DataView objects
- Addons (controls/plugins)
- Backend Services