您的位置:首页 > Web前端 > AngularJS

AngularJS开发前端表格组件

2017-03-07 09:19 260 查看
AngularJS开发前端表格组件

1. 前言

在开发车载项目新版本时,由于采用了新的扁平化视觉,所以以前的框架渐渐不适用。于是在以AngularJs为基础的前端工程上开发表格组件。实现各种需求,比如排序,改变宽度,分页,刷新,搜索,勾选等等。

2. 视觉设计

以下是表格的视觉规范图:

1.线性列表:





2.复合列表:



3.展开式列表:



代码构建及思路分析

1) 将表格作为一个AngularJS的module,在主文件中引入:





使用方法为直接在元素上使用hikGrid指令,通过hikGrid传入相关参数:



2) 将表格拆分为header,content,footer。每个部分都作为一个指令:



3) 新建一个服务HikGridService用于处理表格的主要功能,同时将这个服务作为一个类返回。这样做是为了在多个表格同时存在一个页面的时候,防止不同表格可以独立执行方法,且分隔数据,防止冲突。:



该服务的所有实例方法:



4) 初始化header,content,footer的模板,将指令插入到模板中,同时在模板上加上AngularJS的双向数据绑定。

5) 在主指令hikGrid中初始化HikGridService的实例,执行实例的init方法。



6) 导入外部参数,覆盖默认参数,参数包括:

simpleData:false    //是否不使用异步获取数据时
url:’’             //请求数据url
params:’’          //请求参数
rowHeight:30       //每行高度
columns:[]     //列信息,包括field,displayName,render,width,sortable
width:0            //宽度
height:0           //高度
selectItems:[]     //已选择列,外部传入$scope变量
pagingOptions:{
current:1,  //当前页
pageSize:20,    //每页数量
pageSizes:[20,30,50]    //可选择的每页数量
},
sortOptions:{
field:’’,       //默认排序的列
order:’asc’ //默认排序方式
}
data:null           //表格数据
gridType:0      //表格类型,1普通表格,2 CheckBox表格,3展开式表格,4 Radio表格
showStripe:true //是否显示斑马纹
showHeader:true //是否显示头部
showFooter:true //是否显示底部
enablePaging:true,  //是否分页
enableColumnResize:true //是否允许表格改变宽度
enableSorting:true  //是否允许排序
multiSelection:true //是否是多选
rowSelection:true   //行点击是否是选择行为
expandTemplate:’’   //展示模板
expandTemplateUrl:’’    //展开模板的URL
expandHeight:30 //展开模板的高度
onProcessData:false //处理数据之前的回调
onError:false       //失败回调
onSuccess:false //成功回调
onRowClick:false    //行点击回调
checkEvent:false    //勾选事件回调
searchModel:’’    //搜索框的ngModel
autoResize:false //是否自适应,设置为true时,不需要设置宽高


7) 初始化样式,给表格加上宽高。

8) 异步获取后台分页数据,将获取到的数据复制给$scope中的变量,将header,content,footer的DOM连接并进行$compile编译。数据获取到之后对搜索值进行监控,并执行相应的成功或失败回调。

9) 勾选操作:在每行的勾选框上绑定勾选事件,当勾选触发时,执行数据选择和事件触发。



10) 头部的改变宽度的拖拉:通过改变头部列宽,向下广播该事件,触发每行的监听事件,使每行的该列宽度发生相同变化。



11) 增加斑马纹的空白列:



4. 完成效果图

线性列表:

展开式列表:

特殊底部的列表:

单选框:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  angularjs