Angularjs2 公共基本列表组件
来源:互联网 发布:03湖人马刺数据统计 编辑:程序博客网 时间:2024/05/22 06:34
背景:Extjs使用久了就不想多写html了,最近使用angular4.2.4+ng-bootstrap1.0.0-alpha.25+bootstrap4.0.0-alpha.6+scss开发应用需要写html,封装成grid组件,通过ts设置即可加载显示数据,暂时未实现完,记录
效果:
1.grid.component.html
<div class="col-md-12"> <table [class]="'table table-bordered table-hover '+gconfig.cls" > <thead> <tr > <th *ngFor="let column of columns;let i = index" [class]="'text-center ' + column.widthCls">{{column.header}}</th> </tr> </thead> <tbody> <tr *ngFor="let data of records;let i = index" [class]="data.checked?'table-success':''" (click)="rowClick(data)"> <td *ngFor="let column of columns;let j = index" class="text-center"> {{data[column.dataIndex]}} </td> </tr> </tbody> </table> <c-pagination [hidden]="!gconfig.ispage" [total]="pageConfig.total" [pageList]="pageConfig.pageList" [btnCls]="'btn-outline-info'" (onPageChanged)="onDataChanged($event)"></c-pagination> </div>2.grid-model.ts
/** * 列类型 */export enum ColType { TEXT,BUTTON}/** * 列属性 */export class ColModel{ header:string; width:string; widthCls:string; hidden:boolean; sortable:boolean; dataIndex:string; colType:ColType; getHeader() : string { return this.header; } getWidth() : string { return this.width; } getDataIndex() : string { return this.dataIndex; } getWidthCls() : string { return this.widthCls; } constructor(header:string,dataIndex:string, widthCls:string = 'c-w-1',colType:ColType=ColType.TEXT) { this.header = header; this.widthCls = widthCls; this.dataIndex = dataIndex; }}//分页的对象export class PageConfig{ //每页步长 pageSize:number = 15; //总数 total:number = 0; //可选每页数量 pageList:Array<number> = [15, 25, 35];}export class GridConfig{ //请求参数 url:string; //请求参数 params:any; //成功操作 success:any; //失败操作 failure:any; ispage:boolean = true; cls:string;}3.grid.component.ts
import {Component, Input,Output, ViewEncapsulation,ViewChild,OnInit,EventEmitter} from '@angular/core';import {NgbModule} from '@ng-bootstrap/ng-bootstrap';import {HttpPaginationComponent} from '../pagination/http-pagination.component';import {GridConfig,PageConfig,ColModel} from './grid-model';import { HttpService } from '../http/http.service';/** * 封装table组件 * 实现自定义列,封装分页,查询等共鞥 * @author wall * @date 2017-9-13 * 数据返回示例 * [{ * total:10,rows[{},{}...] * }] */@Component({ selector : 'c-wall-grid', templateUrl : './grid.component.html', encapsulation : ViewEncapsulation.None})export class GridComponent implements OnInit { constructor(private http: HttpService) { } //列表配置 @Input() gconfig:GridConfig = new GridConfig(); //分页配置 @Input() pageConfig:PageConfig = new PageConfig(); //列配置 @Input() columns: Array<ColModel>; //数据配置 @Input() records:Array<any> = new Array(); //行点击事件 @Output() onRowClick = new EventEmitter(); ngOnInit() { } //查询参数 paramsObj:any = { params:{ start:0 ,limit:this.pageConfig.pageSize } }; rowClick(obj:any){ for(let i=0;i<this.records.length;i++){ this.records[i].checked=false; } obj.checked=true; this.onRowClick.emit(obj); } //分页数据变化 onDataChanged($event) { this.paramsObj.params.limit = $event.pageSize; this.paramsObj.params.start = ($event.pageNumber == 0 ? 1 : $event.pageNumber - 1) * $event.pageSize; if ($event.pageNumber != 0) { this.load(this.paramsObj,false); } } /** * 加载数据 * { * url:"", * params:{}, * success:function(){}, * failure:function(){} * } * @param param */ load(param:any,newSelect:boolean=true){ //首次查询 if(newSelect&&this.gconfig.ispage){ if(!param.params){ param.params = new Object(); } param.params.start=0; param.params.limit = this.pageConfig.pageSize; } this.paramsObj = param; //演示数据 this.records.splice(0,this.records.length); for(let i=param.params.start;i<(param.params.start+this.pageConfig.pageSize);i++){ this.records.push({co01:'第一列第'+i+'行数据',co02:'第二列第'+i+'行数据',co03:'第3列第'+i+'行数据',co04:'第4列第'+i+'行数据',co05:'第5列第'+i+'行数据'}) } this.pageConfig.total=10000; /* this.http.postFormData(param.url, param.params , function (successful, data, res) { this.records = data.rows; this.pageConfig.total=data.total; if (param.success) { param.success(successful, data, res); } }, function (successful, msg, err) { if (param.failure) { param.failure(successful, msg, err); } });*/ }}4.调用示例:
import { Component, OnInit, ViewChild } from '@angular/core';import { GridComponent } from '../shared/grid/grid.component';import { ColModel,ColType,GridConfig } from '../shared/grid/grid-model';@Component({ selector: 'c-grid-demo', template: ` <div class="c-content-inner"> <div class="row"> <c-wall-grid #cg [columns]="gridColumns" [gconfig]="gConfig" (onRowClick)="rowclick($event)"></c-wall-grid> </div> </div> `})export class GridDemoComponent implements OnInit { @ViewChild('cg', undefined) cg: GridComponent; constructor(){ } ngOnInit() { //this.gConfig.cls = 'table-striped'; //debugger; //加载数据 this.cg.load({ url:'http://xxxxx' ,params:{ p01:'' } }); } //声明grid的配置 gConfig:GridConfig = new GridConfig(); rowclick($event){ console.info($event) } //声明列信息绑定字段及样式 gridColumns:Array<ColModel>=[ new ColModel('姓名','co01','c-w-1') ,new ColModel('年龄','co02','c-w-1') ,new ColModel('出生日期','co03','c-w-1') ,new ColModel('籍贯','co04','c-w-1') ,new ColModel('操作','co05','c-w-1',ColType.BUTTON) ];}
阅读全文
0 0
- Angularjs2 公共基本列表组件
- angularjs2 公共部分
- angularJS2组件样式
- angularjs2 组件的生命周期
- angularjs2 组件的生命周期
- AngularJS2
- Angularjs2
- angularjs2
- angularjs2入门2-使用多个组件
- AngularJS2之打印组件essence-ng2-print
- 【Android开发】基本组件-列表选择框
- AngularJS2中最基本的文件说明
- angularjs2 外部设置组件header的属性(二)
- angularjs2进阶教程3-建立英雄详情组件
- JAVA.SWT/JFace: SWT基本组件之列表框(List)
- Java界面 SWT基本组件——列表框(List)
- JAVA.SWT/JFace: SWT基本组件之列表框(List)
- 组件列表
- platform总线--驱动发现设备的过程
- 【codevs 1021】玛丽卡
- 平时积累的一些java基础
- iOS开发--打印NSRange,CGRect,CGPoint等结构体
- Leetcode_6 : ZigZag Conversion
- Angularjs2 公共基本列表组件
- frufer 序列(no look)
- Qt5笔记之Qt5插件的生成与加载及json文件的读取
- 怎么上传新建项目到git上面
- DLL 的编写,导出函数 DLL 中.def和extern c的作用
- (十二)php参考手册---MySQLi函数(php操作MySQL)
- Nodejs理论基础
- Linux系统结构 详解
- VUE 指令(部分)一