Реализациякомпонента ArgusGridComponent



В компонент ArgusGridComponentбыла реализована работа с библиотекой devextreme. При помощи данной библиотеки реализована работа с таблицей.

Пример кода шаблона:

<dx-data-grid *ngIf="ready"

style="height: 100%"

#dataGrid

[dataSource]="gridConfig.rowData"

[columns]="gridConfig.columnDef"

[columnAutoWidth]="true"

[allowColumnResizing]="true"

[allowColumnReordering]="true"

[columnResizingMode]="nextColumn"

[columnMinWidth]="50"

(onToolbarPreparing)="onToolbarPreparing($event)"

(onRowClick)="rowDoubleClick($event)">

<dxo-selection *ngIf="!gridConfig.isMultiSelection" mode="single"></dxo-selection>

<dxo-selection *ngIf="gridConfig.isMultiSelection" mode="multiple"></dxo-selection>

<dxo-header-filter [visible]="gridConfig.isHeaderFilter" [allowSearch]="true"></dxo-header-filter>

<dxo-filter-row [visible]="gridConfig.isFilterRow" [applyFilter]="'auto'"></dxo-filter-row>

<dxo-column-chooser [enabled]="gridConfig.isColumnChooser" [allowSearch]="true" [mode]="'select'" [height]="400" [width]="400"></dxo-column-chooser>

<dxo-group-panel [visible]="gridConfig.isGroupPanel"></dxo-group-panel>

<dxo-grouping [contextMenuEnabled]="gridConfig.contextMenu"></dxo-grouping>

<dxo-paging [enabled]="gridConfig.isPaging" [pageSize]="10"></dxo-paging>

<dxo-pager [visible]="gridConfig.isPager" [showInfo]="true"></dxo-pager>

</dx-data-grid>

Как видно в коде в основном реализован функционал, показанный в Диаграмме прецедентов для прецедента «Просмотр данных в таблице».

Так же можно заметить присутствие в коде объекта gridConfig. Данный объект компонент получает из того места откуда он вызывается.

Примеркодакомпонента:

constructor() {

this.gridProvider.gridContext = this;

loadMessages(enMessages);

   loadMessages(ruMessages);

   if (this.translate.currentLang === 'ru-RU') {

       locale('ru');

   } else {

       locale('en');

   }

   let self = this;

   this.translate.onLangChange.subscribe((data: LangChangeEvent) => {

       self.ready = false;

       self.cdr.detectChanges();

       if (data.lang === 'ru-RU') {

           locale('ru');

       } else {

           locale('en');

       }

       self.ready = true;

       self.changeCaption();

       self.cdr.detectChanges();

   });

}

В конструкторе компонента идет реализация локализации для таблицы. Здесь происходит подписание на событие изменение языка. После чего язык в таблице меняется на выбранный.

ngAfterViewInit() {

   this.gridConfig.compContext.dataLoaded.subscribe(() => {

       this.componentToElement();

       this.gridProvider.dataGrid = this.dataGrid;

});

}

Функция ngAfterViewInit() вызывается после того, как компонент про инициализировался. В данной функции ожидаем того, что в родительском компоненте будут подгружены данные из сервиса.

export() {

this.gridProvider.openExport();

}

Функция export()инициализирует компонент ArgusModalComponent, который в свое время инициализирует компонент ArgusExportComponentи берет контент из данного компонента.

changeCaption() {

   if (this.gridConfig.columnDef) {

       this.gridConfig.columnDef.forEach((element) => {

           element.caption = dictionary[this.translate.currentLang][element.dataField];

});

   }

}

Функция changeCaption() переопределяет язык на котором будут выведены названия колонок.

componentToElement() {

   this.gridConfig.columnDef.push(

       {

             dataField: 'Test custom template',

           allowSorting: false,

           allowReordering: false,

           allowResizing: false,

           minWidth: 300,

           allowFiltering: false,

           allowGrouping: false,

           allowHeaderFiltering: false,

           cellTemplate: (elem) => {

               let component = ArgusExpansionPanelFormatterComponent;

               let factory = this.resolver.resolveComponentFactory(component);

               let comp = this.viewContainer.createComponent(factory);

               elem.appendChild(comp.instance.expansivePanel.nativeElement);

           }

       }

   );

   this.changeCaption();

   this.gridConfig = Object.assign(this.defaultConfig, this.gridConfig);

   this.cdr.detectChanges();

}

Добавление колонки с данными, которые имеют вид открывающей панели реализует функция componentToElement(). Для реализации данной панели используется компонент ArgusExpansionPanelComponent.

rowDoubleClick(e: any) {

let component = e.component;

   let prevClickTime = component.lastClickTime;

   component.lastClickTime = new Date();

   if (prevClickTime && (component.lastClickTime - prevClickTime < 300)) {

       this.rowDoubleClickedHandler(e);

   }

}

private rowDoubleClickedHandler(p: any) {

   this.rowDoubleClicked.emit(p);

}

В функции rowDoubleClick() идет отслеживание того, что на строку был произведено двойное нажатие. А в функции rowDoubleClickedHandler() идет создание события, которое будет реализовано в родительском компоненте.

 


Дата добавления: 2018-08-06; просмотров: 508; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!