了解 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. Solr使用访问地址控制索引的,删除、创建

    启动Solr,删除全部索引数据: http://localhost:8080/solr/update/?stream.body=<delete><query>*:*</q ...

  2. RAMOS和SSD对比

    http://bbs.pcbeta.com/forum.php?mod=redirect&goto=findpost&ptid=1786284&pid=48341400RAMO ...

  3. 洛谷P1040 加分二叉树(树形dp)

    加分二叉树 时间限制: 1 Sec  内存限制: 125 MB提交: 11  解决: 7 题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,...,n),其中数字1,2,3,...,n ...

  4. MFC 使用Skin++ 美化皮肤

    查了好几天关于MFC应用程序换肤的资料,经过各种莫名其妙的问题的困扰,现分享一下自己的体会.希望可 以避免一些弯路.另外会在附上一些资源. 环境:Windows 7 + VS2012 + SkinSh ...

  5. docker-容器,仓库

    ---恢复内容开始--- 前言: 学技术不能该断时间,连续的学习才是最好的学习方式. 00x1: 创建一个容器:docker create -it xxxx 而启动容器就有两种状态了,第一:新容器启动 ...

  6. Mysql字符串切分

    Mysql字符串切分的处理 前段时间做了一个对于字符串的切分,对于网页爬取的数据或者不规范的数据来源,常常会有这种需求. 由于在处理的过程中,sql语句中对字符串的出里函数以及方法不太了解,走了不少弯 ...

  7. Asp.NET 简易通用WebServices 附件服务

    [toc] 总述: 用了很久的附件分离服务, .NET 2.0平台开始使用.  配置好服务后, 由调用端定义并管理目录级次.  调用端存储目录即可.  附件服务: 相应配置节点放入 web.confi ...

  8. docker学习记录

    Container 容器是一种基础工具, 泛指任何容纳其他物品的工具, 可以部分或者完全封闭,被用于容纳,储存, 运输物品, 物体可以放置在容器中, 而容器可以保护内容物 1 Docker Objec ...

  9. python-web自动化-文件上传操作(非input标签的上传,需要借助第三方工具)

    文件上传操作 一.文件上传分两种情况:1. 如果是input可以直接输入路径的,可以直接调send_keys输入路径 2. 非input标签的上传,需要借助第三方工具:    2.1 Autolt 需 ...

  10. java面向对象的思想(java三大特性)

    用通俗易懂的语言来理解java面向对象的思想 大家都知道,java是面向对象的编程,掌握面向对象的编程思想是掌握java编程语言的核心,但是很多人在面向对象方面都存在或多或少的误区,有的是刚学完C语言 ...