我正在制作一个devExpress网格的可重用组件。下面的代码是可重用组件(正在制作中)和使用它的父组件。
问题(目前为止)
parent component html
<core-table-dev-express [dataSource$]="dataSource$" [columns]="columns2" [enableBatchEdit]="true"></core-table-dev-express>parent component ts
//data from server
public dataSource$: Observable<Container[]>;
//columns for grid
public columns2: dxColumn[] = [
{ caption: 'Title', dataField: 'title' },
{ caption: 'Id', dataField: 'id', dataType: 'number' },
{
type: "buttons",
caption: 'Actions',
buttons: [{
text: 'Foo',
parentClassObject: this.alertMe
},
{
text: 'Bar',
parentClassObject: this.alertMe
}]
}
]grid component html
<dx-data-grid id="gridContainer1"
[dataSource]="dataSource$ | async"
keyExpr="id"
[repaintChangesOnly]="true"
[columnHidingEnabled]="true"
[columnAutoWidth]="true"
[showBorders]="true"
[showColumnLines]="true"
[showRowLines]="true"
[rowAlternationEnabled]="true"
[allowColumnReordering]="false"
[allowColumnResizing]="false">
<dxo-load-panel [enabled]="true"></dxo-load-panel>
<dxo-column-fixing [enabled]="true"></dxo-column-fixing>
<dxo-column-chooser [enabled]="true" mode="select"></dxo-column-chooser>
<dxo-state-storing [enabled]="true" type="localStorage" storageKey="storage"></dxo-state-storing>
<dxo-search-panel [visible]="true"></dxo-search-panel>
<dxo-filter-row [visible]="true"></dxo-filter-row>
<dxo-group-panel [visible]="true"></dxo-group-panel>
<dxo-scrolling rowRenderingMode="virtual"></dxo-scrolling>
<dxo-paging [pageSize]="gridDefaultPagesize"></dxo-paging>
<dxo-pager [showPageSizeSelector]="true"
[allowedPageSizes]="[15,25,100]"
[showInfo]="true"
[visible]="true">
</dxo-pager>
<dxo-editing *ngIf='enableBatchEdit' mode="batch"
[allowUpdating]="true"
[allowAdding]="true"
[allowDeleting]="true"
[selectTextOnEditStart]="true">
</dxo-editing>
<dxi-column *ngFor="let col of columns"
dataField="{{col.dataField}}"
caption="{{col.caption}}"
dataType="{{col.dataType}}"
type="{{col.type}}"> <!-- can type be conditionally set? -->
<dxi-button *ngFor="let b of col.buttons"
text="{{b.text}}"
hint="{{b.hint}}"
cssClass="{{b.cssClass}}"
icon="{{b.icon}}"
[onClick]="click($event,b)"
>
</dxi-button>
</dxi-column>
</dx-data-grid>grid component ts
import {
Component, Input, ChangeDetectionStrategy, AfterContentInit,
EventEmitter, Output, OnDestroy, ViewChild, ChangeDetectorRef, NgZone, OnInit
} from "@angular/core";
import { dxColumn } from './../interfaces/table.interfaces';
import DataSource from 'devextreme/data/data_source';
import ODataStore from 'devextreme/data/odata/store';
import { Observable } from 'rxjs';
@Component({
selector: 'core-table-dev-express',
templateUrl: './table-dev-express.component.html',
styleUrls: ['./table-dev-express.component.scss'],
})
export class TableDevExpressComponent {
// Shared Variables
public gridDefaultPagesize = 5;
@Input() dataSource$: Observable<any>;
@Input() columns: dxColumn[];
@Input() enableBatchEdit: boolean;
@Output() parentMethod = new EventEmitter<any>();
click = function(e,b) {
this.parentMethod.emit(b.parentClassObject(e)); // need to send back row data
}
}发布于 2021-08-12 14:17:08
type="{{ condition ? expressionIfTrue : expressionIfFalse }}"
发布于 2021-08-12 19:06:44
我使用了模板特性并创建了自己的html,而不是使用dxi按钮。
我还想出了如何调用父方法,而不是最漂亮的代码。
传入的父对象:
public columns2: dxColumn[] = [
{ caption: 'Title', dataField: 'title' },
{ caption: 'Id', dataField: 'id', dataType: 'number' },
{
caption: 'Actions',
buttons: [{
text: 'Edit',
cssClass: "btn btn-primary btn-sm",
clickMethodName: "routerTo",
parentClassObject: this
},
{
text: 'Clone',
cssClass: "btn btn-primary btn-sm",
clickMethodName: "cloneContainer",
parentClassObject: this
}]
}
]共享组件的Html
<dxi-column *ngFor="let col of columns"
dataField="{{col.dataField}}"
caption="{{col.caption}}"
dataType="{{col.dataType}}"
type="{{col.buttons ? 'buttons': null}}">
<dxi-button template="rowButtons">
<div class="btn-group" *dxTemplate="let data of 'rowButtons'">
<div *ngFor="let b of col.buttons">
<button class="{{b.cssClass}}" (click)="click(data,b)">{{b.text}}</button>
</div>
</div>
</dxi-button>
</dxi-column>共享组件的类型记录代码
click = function (row, button) {
this.parentMethod.emit(button.parentClassObject[button.clickMethodName](row.data))
}https://stackoverflow.com/questions/68758900
复制相似问题