了解 Angularjs UI-Grid

起因:项目需要一个可以固定列和表头的表格,因为表格要显示很多列,当水平滚动条拉至后边时可能无法看到前边的某些信息。

以前在angularjs 1.x 中一直都是直接 ng-repeat去完成一个table,显示上没有太多要求,此时遇到这个需求 ,时间上又无法允许你去思考实现之法,而且angularjs 去实现一个像这样的指令也并不容易,于是便要去寻找一个可用的angularjs 插件。

Angular UI-Grid ui-grid.info

同以往的js插件一样,可以通过 bower ,npm 等 获取。

使用 UI-Grid

UI-Grid 公共配置
  <section ui-grid="gridOptions" ui-grid-exporter ui-grid-pagination ui-grid-grouping ui-grid-selection ui-grid-auto-resize ui-grid-pinning ui-grid-resize-columns 

class="grid"></section>

UI-Grid 使用了一些directive 去实现相应的功能 :

ui-grid-exporter 用于数据导出

ui-grid-pagination 用于启用分页

ui-grid-grouping 用于启用数据分组

ui-grid-selection 用于启用选择行

ui-grid-auto-resize 用于启用高度自适应

ui-grid-pinning 用于固定列

ui-grid-resize-columns 用于拖动列宽度

那么要用到这些指令我们需要将一写Module导入到自己的应用中.在我的app.js 中:

           angular.module('exampleApp', [
'ui.grid',
'ui.grid.pinning',
'ui.grid.pagination',
'ui.grid.selection',
'ui.grid.autoResize',
'ui.grid.resizeColumns',
'ui.grid.exporter',
'ui.grid.grouping'
]);

导入之后还需要对grid 进行一些配置

就是上边的 gridOptions ,在我的controller中对它进行如下配置:

UI-Grid Grid配置

exporterMenuCsv:是否在Grid Meun中显示Csv导出项,当启用数据导出时,此配置默认为 true

gridMenuCustomItems:在Grid Menu中我们可以自定义自己的菜单项和对应的行为。

           [
{
title: '倒显↙▼↙',
action: function ($event) {
this.grid.element.toggleClass('rotated');
},
order: 211
},{
title: '导出Excel',
action: function ($event) {
var bdate = vm.startDate.val?moment(vm.startDate.val).format('YYYY-MM-DD'):'';
var edate = vm.endDate.val ?moment(vm.endDate.val).format('YYYY-MM-DD'):'';
var status = vm.selectedStatu.status;
var dtype = vm.querySummaryInput.dateType;
var lessexporturi = '/ConnBridge/ExportExcel4lessdata?begindate='+bdate+'&enddate='
abp.openwin(lessexporturi);
},
order: 210
}
]

exporterMenuPdf :是否在Grid Menu 中显示 导出Pdf的选项 ,在启用Pdf的时候需要一些其他的操作,下边在说。

enablePagination:是否启用默认分页,默认为 true

enablePaginationControls:使用底部的默认分页.

paginationPageSizes:页容量的可选值

paginationCurrentPage:页码

paginationPageSize:页容量

totalItems:数据总条数

useExternalPagination:是否使用分页按钮

exporterFieldCallback:导出数据之前的操作,可以进行导出数据格式化

enableGridMenu:是否启用Grid Menu

exporterOlderExcelCompatibility:兼容Excel的Csv操作 ,后边说详细

showGridFooter:是否显示Grid Footer

showColumnFooter:是否显示Column Footer

enableRowHeaderSelection:是否显示选择行的第一列

exporterCsvFilename:需要导出的Csv的文件名称.

exporterPdfDefaultStyle:需要导出的Pdf的默认样式.

exporterPdfFilename:需要导出的Pdf的文件名称.

exporterAllDataFn:当点击导出所有数据时提供数据的方法.

enableHorizontalScrollbar:是否显示水平滚动条. 0 为不显示 1为显示

enableVerticalScrollbar:是否显示垂直滚动条. 0 为不显示 1为显示

onRegisterApi:分页按钮事件方法

UI-Grid Grid Column配置

name:可以用来和数据进行关联,如果不提供应该提供 field以用来让UI-Grid关联数据

field:可以用来和数据进行关联 field以用来让UI-Grid关联数据,和name的具体区别可以看Grid 文档

displayName:显示的列名称

width:指定列宽度 可以用 * 或者** 自动适应 详见文档

rowHeight:行高度,默认是30

enablePinning:启用固定列

pinnedLeft:固定到左侧

pinnedRight:固定到右侧

groupingShowAggregationMenu:是否在菜单中显示分组计算

groupingShowGroupingMenu:是否在列表菜单中显示分组

enableSorting:是否启用排序

visible:是否隐藏列

cellFilter:列数据过滤器 可以应用 date,number ...还有自定义的filter

aggregationType:分组数据显示类型 这里可以计算总和,求平均值等 例如求和: uiGridConstants.aggregationTypes.sum并显示在footer对应的column中

footerCellTemplate:可以自定义column footer的显示模板

type:指定数据类型 应用于排序

UI-Grid Grid 细节

在使用JS插件的时候,常常要考虑的问题是本地化,UI-Grid也不例外

在第一次未配置时候,或显示乱码 ,我们可以注入 i18nService服务来进行获取或配置语言

i18nService.getAllLangs()可以获取所有支持的语言.

i18nService.getCurrentLang()可以查看当前的语言.

这样我们可以通过i18nService.setCurrentLang('zh-cn')可以设置为中文简体

在使用Pdf导出的前提是要引入 pdfmake.min.js 和 vfs_fonts.js

但是当我导出这些数据的时候pdf会中文乱码

解决办法是重新生成 vfs_fonts.js 目的是把中文字体写入此文件

首先我们要找到源代码

mkdir mkpdf

cd mkpdf

git clone https://github.com/bpampuch/pdfmake.git

pdfmake下的examples中进入fonts文件夹,将我们的中文字体放入此文件夹中。

回到pdfmake文件夹,执行 npm install 确保所有依赖的包都已经安装

之后 执行gulp buildFonts 生成 vfs_fonts.js 和(pdfmake.min.js pdfmake.js )

完成这些之后我们要做的是,将自己项目中的这些js文件 替换为 新生成的js文件。

在我们要导出pdf之前还要配置一下字体

         window.pdfMake.fonts={
simblack: {
normal: 'msyh.ttf',
bold: 'msyhbd.ttf',
italics: 'msyh.ttf',
bolditalics: 'msyh.ttf'
},
Roboto: {
normal: 'Roboto-Regular.ttf',
bold: 'Roboto-Medium.ttf',
italics: 'Roboto-Italic.ttf',
bolditalics: 'Roboto-Italic.ttf'
}
}

这样我们就可以在UI-Grid中配置我们想要使用的预定义字体 ,还记得上边这个配置么 ?

exporterPdfDefaultStyle :{font:'simblack',fontSize: 9}

导出的Csv文件,Excel 打开乱码

开发的时候因为本机一直安装wps 所以打开一直没问题,可是拿到别人的机器上用 office excel 2016 打开中文就会乱码.

这个乱码多是编码问题,这样我用记事本打开指定的Csv文件并用 ANSI 编码 替换,中文便可以正常显示

github 上找到这个问题 他们可以用这个属性配置兼容 office excel 正确显示中文 就是上边提到的 这个配置 exporterOlderExcelCompatibility:true 这个配置默认是 false 的,需要我们自己启用。

虽然 用 office excel 2016 打开不会乱码了,但是我用 office excel 2007 打开问题依旧, 看样子Csv文件做表格并不妥当.

后来 我干脆把前台的数据导出都移至后台,于是就出现了为什么要自定义Grid Menu 的需要 还有就是禁用菜单默认显示的Csv文件导出。

Grid 虽好很多功能都实现的不错,但是自己用的时候发现一些问题 :

. 当我开启固定列时,如果没有水平滚动条的话,那么当垂直滚动数据到底部的时候固定列的数据和后边的数据行会对不齐。

. 当快速拉动滚动条(垂直或水平)时,表格会卡顿,数据显示并不是十分流畅,这点我感觉是 UI-Grid 最悲催的问题,或许是我看问题的视角不够广,但是问题毕竟是问题。

当需要自定义Column Footer cell 的样式和数据时 在 footerCellTemplate 中我们可以 用 grid.appScope 访问 $scope 可以用 row 和 grid  去找我们想要的行 或者是grid 数据。

比如我之前的要的一个功能是在分组的那一行显示一个按钮用于跳转 详细页面 ,那么首先我要确定 哪一行是 分组行,还要找到那一行"分组的文本"(例如按订单编号分组,分组文本就是订单编号) 。

1 .确定是不是分组那一行(或是聚合的那一行) 我们可以用 row.groupHeader===true  。

2. 找到分组文本(或是聚合文本) ,可以用 row.entity['$$uiGrid-0008'].groupVal  。


补充:

对于上边的表格卡顿问题,之前没有仔细阅读文档,在Grid-Options 的配置中可以用 columnVirtualizationThreshold  :10 (列)和virtualizationThreshold:20 (行)           这两个配置解决 ,我们可以将他们的值设置的大一些,就不会卡顿了。     O(∩_∩)O~~


step_by_step_Angularjs-UI-Grid使用简介的更多相关文章

  1. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

  2. NGUI UI Grid, two column

    NGUI UI Grid, two column, set Arrangement Horizontal, Column Limit 2.

  3. Kendo Web UI Grid添加一个html控件如(checkbox,button)

    在Kendo Web UI Grid增加一个控件如效果图: <div id="grid1"></div><script> $("#gr ...

  4. kendo ui grid选中行事件,获取combobox选择的值

    背景: 以前用 telerik ui做的grid现在又要换成kendo ui,不过说句实话kendo ui真的比telerik好多,可以说超级升级改头换面.当然用的mvc的辅助方法,以前的teleri ...

  5. Kendo UI Grid 使用总结

    Kendo UI Grid控件的功能强大,这里将常用的一些功能总结一下. Kendo UI Grid 固定列 在使用Gird控件显示数据时,如果数据列过多,会出现横向滚动条,很多情况下,我们希望某些列 ...

  6. Kendo UI Grid 批量编辑使用总结

    项目中使用Kendo UI Grid控件实现批量编辑,现在将用到的功能总结一下. 批量编辑基本设置 Kendo Grid的设置方法如下: $("#grid").kendoGrid( ...

  7. [Asp.net mvc] Asp.net mvc Kendo UI Grid的使用(四)

    有段时间没写博客了,工作状态比较忙,抽空继续总结下Grid的使用,这次主要介绍模板以及其他官网介绍不详尽的使用方法.先Show出数据,然后讲解下.后台代码: public ActionResult O ...

  8. Kendo Web UI Grid数据绑定,删除,编辑,并把默认英文改成中文

    Kendo Web UI 是个不错的Jquery框.可惜老外写的,很多都是默认的英文,当然我们也可以设置成中文,接下来,我们就看看Grid是如何实现的数据绑定(Kendo Grid数据绑定实现有很多方 ...

  9. Asp.net mvc Kendo UI Grid的使用(二)

    上一篇文章对Kendo UI做了一些简单的介绍以及基本环境,这篇文章来介绍一下Grid的使用 先上效果图: 要实现这个效果在Controller在要先导入Kendo.Mvc.UI,Kendo.Mvc. ...

  10. 封装扩展Kendo UI Grid

    封装后的代码如下: function DataGrid(options) { this.options = { height: "100%", sortable: true, re ...

随机推荐

  1. RAMOS (内存操作系统)-无忧百科(不断完善中)

    RAMOS (内存操作系统)-无忧百科(不断完善中) - RAMOS - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?mod= ...

  2. 负载均衡中的session保持

    什么叫负载均衡中的session保持 当我们需要做负载均衡时,服务端肯定有多台服务器,用户每次请求进来,会根据负载均衡算法被分配到某一台机器上,假设用户需要进行一段连续操作时,在第一台机器登陆后,下一 ...

  3. multipart/form-data和application/x-www-form-urlencoded区别

    FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型.例如: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对.这是标准的编码格 ...

  4. 小程序sitemap配置

    这几天在官网文档中发现小程序也支持索引了链接,就是是在根目录下新建sitemap.json 文件. { "rules": [ { "action": " ...

  5. Altium Designer 放置机械孔

    先放置一个圆弧,将圆选中:执行Tools -> Convert -> Create Board Cutout from Selected Primitives

  6. centos设置路由route

    一. route命令                        1) 查看:route -n      2)添加: route add  [-net|-host]  target [netmask ...

  7. Linux中docker的使用(2)

    容器下安装jdk和tomcat:通过挂载文件的方法,把宿主机上的文件挂载到容器中,然后解压到opt目录下:tar -zxvf 包名 -C /opt//opt目录下drwxr-xr-x 8 10 143 ...

  8. POI导入demo

    前言 使用上篇博文的导入方法,写一个简单的导入demo.其实有了工具类之后就没啥难度了,也就只简单的拿数据.先写个简单的,然后想办法实现动态读取吧,这样读取其实还是比较烦的,每次该模板都要改代码,说到 ...

  9. java-其他-索引

    数据结构 设计模式 算法题

  10. openssl error while loading serial number

    unable to load number from D:/Program Files/OpenSSL-Win64/bin/demoCA/serialerror while loading seria ...