Angularjs UI-Grid 超详细-程序员宅基地

技术标签: UI-Grid  Angularjs  

了解 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~~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37103843/article/details/89021880

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法