-
-
Notifications
You must be signed in to change notification settings - Fork 120
Migration to 2.x
-
Angular-Slickgrid Services are no longer Singleton and are no longer available as Dependency Injection (DI) anymore, they are instead available in the Angular Grid Instance that can be obtained by the
onAngularGridCreated
Event Emitter (see below)- this is the biggest change, so please make sure to review the code sample below
-
Event Emitter
(onGridStateServiceChanged)
renamed to(onGridStateChanged)
-
GridExtraUtil
no longer exist, it was containing only 1 functiongetColumnDefinitionAndData()
that got moved into theGridService
and renamed togetColumnFromEventArguments
The Event Emitters (onGridCreated)
and (onDataviewCreated)
still exists but it is now much easier to get the Slick Grid & DataView objects directly from the (onAngularGridCreated)
Event Emitter (it's an all in 1 emitter that includes Slick objects and Angular-Slickgrid Services)
- see below
- Column Definition
onCellClick
andonCellChange
function signatures changed to be more in line with SlickGrid subscribed events and also to provide a way to stop event bubbling if user needs that- both functions now have 2 arguments e.g.:
onCellChange?: (e: Event, args: OnEventArgs) => void;
, see full example below
- both functions now have 2 arguments e.g.:
- all the Editors options were previously passed through the generic
params
property. However this which removes the benefit of intellisense (VScode) and TypeScript Type check, so all of these options got moved into theeditor
options (see below)
- For consistencies, all Grid Menu and Header Menu
showX
flags were renamed tohideX
to align with some of the SlickGridhideX
(see below) -
exportWithFormatter
is no longer available directly in the Grid Options, it is now underexportOptions
Grid Options (see below) -
i18n
is now a Grid Options which is easier to deal with instead of using the genericparams
(see below)
- all the Editors options were previously passed through the generic
params
property. However this was removing the benefit of intellisense (VScode) and TypeScript Type checking. We moved all of these options into theeditor
that is now a complex object - the Grid Option
editor
is now a complex object with the same structure as thefilter
Grid Option. This also mean that all the arguments that were previously passed to the genericparams
are now passed in theeditor
withmodel
property- this also brings TypeScript types and intellisense to
collection
,collectionFilterBy
andcollectionSortBy
- this also brings TypeScript types and intellisense to
- Custom Editor is now also supported
- see code change below
- Select Filter (
FilterType.select
) withselectOptions
got renamed tocollection
- previously we had
searchTerms
(array) andsearchTerm
(singular), but the lattersearchTerm
was dropped in favor of using onlysearchTerms
to remove duplicate logic code. -
FilterType
got removed and you can now use directlyFilters
, also to emphasis the change we renamed thefilter
propertytype
tomodel
- see example below
- For
BackendServiceApi
, theservice
property now as to contain anew
instance of the Backend Service that you want to use (GraphqlService
orGridOdataService
). See explanation below - All 3
onX
service methods were renamed toprocessOnX
to remove confusion withonX
Event Emitters with the same names. (see below)- this will probably not concern you, unless you built your own custom Backend Service API
-
BackendService
methodinitOptions
got removed and replaced byinit
which has a different argument signature
- removed
onBackendEventApi
which was replaced bybackendServiceApi
- removed Select Filter
selectOptions
, replaced bycollection
- removed
FormElementType
which was replaced byFilterType
- removed
initOptions
function frombackendServiceApi
, which was replaced byinit
with a different signature - remove
GridExtraUtil
Service
This new instance will contain all the Angular-Slickgrid Services (that were previously available as DI). As you can see below, you simply need to remove all DI and get a reference of the service you want through the AngularGridInstance
Note:
-
GridExtraService
is now exported asGridService
-
GroupingAndColspanService
is now exported asGroupingService
-
ControlAndPluginService
is now exported asPluginService
export interface AngularGridInstance {
// Slick Grid & DataView objects
dataView: any;
slickGrid: any;
// Services
backendService?: BackendService;
pluginService: ControlAndPluginService;
exportService: ExportService;
filterService: FilterService;
gridService: GridService;
gridEventService: GridEventService;
gridStateService: GridStateService;
groupingService: GroupingAndColspanService;
resizerService: ResizerService;
sortService: SortService;
}
<angular-slickgrid gridId="grid1"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
[dataset]="dataset"
+ (onAngularGridCreated)="angularGridReady($event)">
</angular-slickgrid>
export class MyGridDemo implements OnInit {
+ angularGrid: AngularGridInstance;
columnDefinitions: Column[];
gridOptions: GridOption;
dataset: any[];
- constructor(private GridExtraService) {}
+ angularGridReady(angularGrid: AngularGridInstance) {
+ this.angularGrid = angularGrid;
+ // Slick Grid & DataView objects
+ this.gridObj = angularGrid.slickGrid;
+ this.dataViewObj = angularGrid.dataView;
+ }
addNewItem() {
const newItem = {
id: newId,
title: 'Task ' + newId,
effortDriven: true,
// ...
};
- this.gridExtraService.addItemToDatagrid(newItem);
+ this.angularGrid.gridService.addItemToDatagrid(newItem);
}
export class MyGrid {
- constructor(private graphqlService: GraphqlService, private i18n: I18N) {
+ constructor(private i18n: I18N) {
}
this.gridOptions = {
backendServiceApi: {
- service: this.graphqlService,
+ service: new GraphqlService(),
preProcess: () => this.displaySpinner(true),
process: (query) => this.getCustomerApiCall(query),
postProcess: (result: GraphqlResult) => this.displaySpinner(false)
},
params: {
i18: this.translate
}
};
Previously available directly in the grid options but is now accessible only from the exportOptions
property. Also worth to know that the exportOptions
contains much more options, you can see the exportOptions
interface here.
this.gridOptions = {
- exportWithFormatter: true
exportOptions: {
+ exportWithFormatter: false,
}
};
this.gridOptions = {
enableTranslate: true,
- params: {
- i18n: this.translate
- },
+ i18n: this.translate,
};
import { Column, Editors, GridOption } from 'angular-slickgrid';
this.columnDefinitions = [
{
id: 'title', name: 'Title', field: 'title',
type: FieldType.string,
- editor: Editors.longText,
+ editor: {
+ model: Editors.longText
+ },
},
{
id: 'title2', name: 'Title, Custom Editor', field: 'title',
type: FieldType.string,
+ editor: {
// new CUSTOM EDITOR added
+ model: CustomInputEditor // no need to instantiate it
+ },
},
{
id: 'prerequisites', name: 'Prerequisites', field: 'prerequisites',
type: FieldType.string,
- editor: Editors.multipleSelect,
+ editor: {
+ model: Editors.multipleSelect,
+ collection: Array.from(Array(12).keys()).map(k => ({ value: `Task ${k}`, label: `Task ${k}` })),
+ collectionSortBy: {
+ property: 'label',
+ sortDesc: true
+ },
+ collectionFilterBy: {
+ property: 'label',
+ value: 'Task 2'
+ }
+ },
- params: {
- collection: Array.from(Array(12).keys()).map(k => ({ value: `Task ${k}`, label: `Task ${k}` })),
- collectionSortBy: {
- property: 'label',
- sortDesc: true
- },
- collectionFilterBy: {
- property: 'label',
- value: 'Task 2'
- }
- }
}
];
-
selectOptions
renamed tocollection
-
FilterType
replaced byFilters
-
type
renamed tomodel
-
searchTerm
removed in favor of an array ofsearchTerms
- Custom Filter is now much simpler, just pass a new instance of your class
- import { Column, FilterType } from 'angular-slickgrid';
+ import { Column, Filters } from 'angular-slickgrid';
// column definitions
this.columnDefinitions = [
{
id: 'isActive', name: 'Is Active', field: 'isActive',
type: FieldType.boolean,
filterable: true,
filter: {
- selectOptions: [ { value: '', label: '' }, { value: true, label: 'true' }, { value: false, label: 'false' } ],
+ collection: [ { value: '', label: '' }, { value: true, label: 'true' }, { value: false, label: 'false' } ],
- type: FilterType.multipleSelect,
+ model: Filters.multipleSelect,
searchTerms: [], // default selection
}
},
{
id: 'description', name: 'Description', field: 'description',
filter: {
- type: FilterType.custom,
- customFilter: CustomInputFilter
+ model: CustomInputFilter // create a new instance to make each Filter independent from each other
}
},
{
id: 'isActive', name: 'Is Active', field: 'isActive',
type: FieldType.boolean,
filterable: true,
filter: {
collection: [ { value: '', label: '' }, { value: true, label: 'true' }, { value: false, label: 'false' } ],
type: FilterType.multipleSelect,
- searchTerm: true, // default selection
+ searchTerms: [true], // default selection
}
}
];
onCellChange
and onCellClick
now expose Event as the 1st argument to be in line with SlickGrid subscribed event
this.columnDefinitions = [{
id: 'delete',
field: 'id',
formatter: Formatters.deleteIcon,
- onCellClick: (args: OnEventArgs) => {
+ onCellClick: (e: Event, args: OnEventArgs) => {
alert(`Deleting: ${args.dataContext.title}`);
+ e.stopImmediatePropagation(); // you can stop event bubbling if you wish
}
}, {
id: 'title',
name: 'Title',
field: 'title',
- onCellChange: (args: OnEventArgs) => {
+ onCellChange: (e: Event, args: OnEventArgs) => {
alert(`Updated Title: ${args.dataContext.title}`);
}
}
];
Since these flags are now inverse, please do not forget to also inverse your boolean
value.
Here is the entire list of Grid Menu
-
showClearAllFiltersCommand
renamed tohideClearAllFiltersCommand
-
showClearAllSortingCommand
renamed tohideClearAllSortingCommand
-
showExportCsvCommand
renamed tohideExportCsvCommand
-
showExportTextDelimitedCommand
renamed tohideExportTextDelimitedCommand
-
showRefreshDatasetCommand
renamed tohideRefreshDatasetCommand
-
showToggleFilterCommand
renamed tohideToggleFilterCommand
and here is the list for Header Menu showColumnHideCommand
-
showColumnHideCommand
renamed tohideColumnHideCommand
-
showSortCommands
renamed tohideSortCommands
Here is the entire list
-
onFilterChanged
was renamed toprocessOnFilterChanged
-
onPaginationChanged
was renamed toprocessOnPaginationChanged
-
onSortChanged
was renamed toprocessOnSortChanged
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