[转]angularjs之ui-grid 使用详解

本文转自:http://blog.csdn.net/qhkabuqiluo/article/details/52237710

最近一段时间在使用angularjs 然后就找到ui-grid 这个比较不错的表格插件,感觉还不错,所以分享给大家(ps:新手第一次发)

html:

[html] view plain copy print?

  1. <pre name="code" class="html"><!--ui-grid css-->
  2. <link rel="stylesheet" type="text/css" href="../lib/angular-ui/ui-grid/ui-grid.min.css">
  3. <div class="gridStyle" ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns ui-grid-auto-resize ui-grid-exporter ui-grid-edit ui-gird-pagination ui-grid-cellnav>
  4. </div>
  5. <!--ui-grid js-->
  6. <script src="../lib/angular-ui/ui-grid/ui-grid.min.js"></script>
  7. <!--ui-grid excel export-->
  8. <script src="../lib/angular-ui/ui-grid/csv.js"></script>
  9. <!--ui-grid pdf export-->
  10. <script src="../lib/angular-ui/ui-grid/pdfmake.min.js"></script>
  11. <script src="../lib/angular-ui/ui-grid/vfs_fonts.js"></script>
  12. <!--ui-grid-selection 选择行指令-->
  13. <!--ui-grid-resize-columns 表格宽可拉伸指令-->
  14. <!--ui-grid-auto-resize 自动使用div的高度和宽度指令-->
  15. <!--ui-grid-exporter 导出指令-->
  16. <!--ui-grid-edit 编辑指令-->
  17. <!--ui-gird-pagination 分页指令-->
  18. <!--ui-gird-pagination 分页指令-->
  19. <!--ui-grid-cellnav 单元格指令-->
  20. <!--gridStyle 自定义设置样式-->

<pre name="code" class="html"><!--ui-grid css-->
<link rel="stylesheet" type="text/css" href="../lib/angular-ui/ui-grid/ui-grid.min.css">
<div class="gridStyle" ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns ui-grid-auto-resize ui-grid-exporter ui-grid-edit ui-gird-pagination ui-grid-cellnav>
</div>
<!--ui-grid js-->
<script src="../lib/angular-ui/ui-grid/ui-grid.min.js"></script>
<!--ui-grid excel export-->
<script src="../lib/angular-ui/ui-grid/csv.js"></script>
<!--ui-grid pdf export-->
<script src="../lib/angular-ui/ui-grid/pdfmake.min.js"></script>
<script src="../lib/angular-ui/ui-grid/vfs_fonts.js"></script>
<!--ui-grid-selection 选择行指令-->
<!--ui-grid-resize-columns 表格宽可拉伸指令-->
<!--ui-grid-auto-resize 自动使用div的高度和宽度指令-->
<!--ui-grid-exporter 导出指令-->
<!--ui-grid-edit 编辑指令-->
<!--ui-gird-pagination 分页指令-->
<!--ui-gird-pagination 分页指令-->
<!--ui-grid-cellnav 单元格指令-->
<!--gridStyle 自定义设置样式-->

js:

[javascript] view plain copy print?

  1. angular.module(‘app‘, [‘ui.grid‘,‘ui.grid.selection‘,‘ui.grid.resizeColumns‘,‘ui.grid.autoResize‘,‘ui.grid.edit‘,‘ui.grid.exporter‘,‘ui.grid.pagination‘,‘ui.grid.cellNav‘])
  2. .controller(‘RootCtrl‘, function($scope,i18nService) {//前四个基本上是必用到的 后面的可以根据自身情况去加
  3. // 国际化;
  4. i18nService.setCurrentLang(‘zh-cn‘);
  5. $scope.gridOptions = {
  6. data : ‘myData‘,
  7. //基础属性
  8. enableSorting : true,//是否支持排序(列)
  9. useExternalSorting : false,//是否支持自定义的排序规则
  10. enableRowHeaderSelection : false,
  11. enableGridMenu : false,//是否显示表格 菜单
  12. showGridFooter: true,//时候显示表格的footer
  13. enableHorizontalScrollbar : 1,//表格的水平滚动条
  14. enableVerticalScrollbar : 1,//表格的垂直滚动条 (两个都是 1-显示,0-不显示)
  15. selectionRowHeaderWidth : 30,
  16. enableCellEditOnFocus:false,//default为false,true的时候单击即可打开编辑(cellEdit为true的时候,需要引入‘ui.grid.cellNav‘)
  17. //分页属性
  18. enablePagination: true, //是否分页,default为true
  19. enablePaginationControls: true, //使用默认的底部分页
  20. paginationPageSizes: [10, 15, 20], //每页显示个数选项
  21. paginationCurrentPage:1, //当前的页码
  22. paginationPageSize: 10, //每页显示个数
  23. paginationTemplate:"<div></div>", //自定义底部分页代码
  24. totalItems : 0, // 总数量
  25. useExternalPagination: true,//是否使用分页按钮
  26. //选中
  27. rowTemplate: "<div ng-dblclick=\"grid.appScope.onDblClick(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name\" class=\"ui-grid-cell\" ng-class=\"{ ‘ui-grid-row-header-cell‘: col.isRowHeader }\" ui-grid-cell></div>",//双击行事件
  28. enableFooterTotalSelected: true, // 是否显示选中的总数,default为true,如果显示,showGridFooter 必须为true
  29. enableFullRowSelection : true, //是否点击行任意位置后选中,default为false,当为true时,checkbox可以显示但是不可选中
  30. enableRowHeaderSelection : true, //是否显示选中checkbox框 ,default为true
  31. enableRowSelection : true, // 行选择是否可用,default为true;
  32. enableSelectAll : true, // 选择所有checkbox是否可用,default为true;
  33. enableSelectionBatchEvent : true, //default为true
  34. modifierKeysToMultiSelect: false ,//default为false,为true时只能按ctrl或shift键进行多选,这个时候multiSelect必须为true;
  35. multiSelect: true ,// 是否可以选择多个,默认为true;
  36. noUnselect: false,//default为false,选中后是否可以取消选中
  37. selectionRowHeaderWidth:30 ,//default为30,设置选择列的宽度
  38. //api
  39. onRegisterApi : function (gridApi) {
  40. $scope.gridApi = gridApi;
  41. $scope.gridApi.edit.on.afterCellEdit($scope,function(rowEntity){
  42. //编辑离开事件
  43. });
  44. $scope.gridApi.selection.on.rowSelectionChanged($scope,function(row,event){
  45. //行选中事件
  46. });
  47. },
  48. //导出(只支持csv,扩展性不太好)
  49. exporterAllDataFn: function(){//导出全部
  50. return getAllData();
  51. },
  52. exporterCsvColumnSeparator: ‘,‘,
  53. exporterCsvFilename:‘testdown.csv‘,
  54. exporterFieldCallback : function ( grid, row, col, value ){//导出回调可以过滤条件
  55. return value;
  56. },
  57. exporterHeaderFilterUseName : true,
  58. exporterMenuCsv : true,
  59. exporterMenuLabel : "Export",
  60. exporterMenuPdf : true,
  61. exporterOlderExcelCompatibility : false,//是否兼容低版本excel
  62. exporterPdfCustomFormatter : function ( docDefinition ) {
  63. docDefinition.styles.footerStyle = { bold: true, fontSize: 10 };
  64. return docDefinition;
  65. },
  66. exporterPdfFooter :{
  67. text: ‘‘,
  68. style: ‘‘
  69. },
  70. exporterPdfDefaultStyle : {
  71. fontSize: 11,font:‘simblack‘ //font 设置自定义字体
  72. },
  73. exporterPdfFilename:‘testdown.pdf‘,
  74. exporterPdfFooter: function(currentPage, pageCount) {
  75. return currentPage.toString() + ‘ of ‘ + pageCount;
  76. },
  77. exporterPdfHeader : function(currentPage, pageCount) {
  78. return currentPage.toString() + ‘ of ‘ + pageCount;
  79. },
  80. exporterPdfMaxGridWidth : 720,
  81. exporterPdfOrientation : ‘landscape‘,//  ‘landscape‘ 或 ‘portrait‘ pdf横向或纵向
  82. exporterPdfPageSize : ‘A4‘,// ‘A4‘ or ‘LETTER‘
  83. exporterPdfTableHeaderStyle : {
  84. bold: true,
  85. fontSize: 12,
  86. color: ‘black‘
  87. },
  88. exporterPdfTableLayout : null,
  89. exporterPdfTableStyle: {
  90. margin: [0, 5, 0, 15]
  91. },
  92. exporterSuppressColumns : [‘name‘],//过滤不需要的列
  93. exporterSuppressMenu: false,
  94. //列属性设置
  95. columnDefs: [{   field: ‘name‘,
  96. displayName: ‘名字‘,
  97. width: ‘100‘, //宽度设置
  98. enableColumnMenu: false,// 是否显示列头部菜单按钮
  99. //enableHiding: false,
  100. //suppressRemoveSort: true,
  101. enableCellEdit: false, // 是否可编辑
  102. cellEditableCondition:function($scope){
  103. return boolean;//是否编辑控制
  104. },
  105. visible:true,是否显示default为true,
  106. cellTemplate : ‘<a href="" ng-click="grid.appScope.viewPages(row.entity);">{{row.entity.name==1?"重写":""}}</a>‘,//重写cell
  107. cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
  108. //做一些判断。。。
  109. return ‘red‘//自定义样式
  110. },
  111. //cell下拉
  112. editableCellTemplate: ‘ui-grid/dropdownEditor‘,
  113. editDropdownOptionsArray: [],//[{name:1,nameText:‘Yoko‘}]
  114. editDropdownIdLabel: ‘name‘,//id
  115. editDropdownValueLabel: ‘nameText‘,//显示的名字
  116. cellFilter:"nameFilet"//过滤器
  117. }
  118. ],
  119. };
  120. var myData=[{name:‘‘}];
  121. });

angular.module(‘app‘, [‘ui.grid‘,‘ui.grid.selection‘,‘ui.grid.resizeColumns‘,‘ui.grid.autoResize‘,‘ui.grid.edit‘,‘ui.grid.exporter‘,‘ui.grid.pagination‘,‘ui.grid.cellNav‘])
.controller(‘RootCtrl‘, function($scope,i18nService) {//前四个基本上是必用到的 后面的可以根据自身情况去加
            // 国际化;
            i18nService.setCurrentLang(‘zh-cn‘);
            $scope.gridOptions = {
				data : ‘myData‘,
				//基础属性
				enableSorting : true,//是否支持排序(列)
				useExternalSorting : false,//是否支持自定义的排序规则
				enableRowHeaderSelection : false,
				enableGridMenu : false,//是否显示表格 菜单
				showGridFooter: true,//时候显示表格的footer
				enableHorizontalScrollbar : 1,//表格的水平滚动条
				enableVerticalScrollbar : 1,//表格的垂直滚动条 (两个都是 1-显示,0-不显示)
				selectionRowHeaderWidth : 30,
				enableCellEditOnFocus:false,//default为false,true的时候单击即可打开编辑(cellEdit为true的时候,需要引入‘ui.grid.cellNav‘)
				//分页属性
                enablePagination: true, //是否分页,default为true
                enablePaginationControls: true, //使用默认的底部分页
                paginationPageSizes: [10, 15, 20], //每页显示个数选项
                paginationCurrentPage:1, //当前的页码
                paginationPageSize: 10, //每页显示个数
                paginationTemplate:"<div></div>", //自定义底部分页代码
                totalItems : 0, // 总数量
                useExternalPagination: true,//是否使用分页按钮
                //选中
				rowTemplate: "<div ng-dblclick=\"grid.appScope.onDblClick(row)\" ng-repeat=\"(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name\" class=\"ui-grid-cell\" ng-class=\"{ ‘ui-grid-row-header-cell‘: col.isRowHeader }\" ui-grid-cell></div>",//双击行事件
                enableFooterTotalSelected: true, // 是否显示选中的总数,default为true,如果显示,showGridFooter 必须为true
                enableFullRowSelection : true, //是否点击行任意位置后选中,default为false,当为true时,checkbox可以显示但是不可选中
                enableRowHeaderSelection : true, //是否显示选中checkbox框 ,default为true
                enableRowSelection : true, // 行选择是否可用,default为true;
                enableSelectAll : true, // 选择所有checkbox是否可用,default为true;
                enableSelectionBatchEvent : true, //default为true
                modifierKeysToMultiSelect: false ,//default为false,为true时只能按ctrl或shift键进行多选,这个时候multiSelect必须为true;
                multiSelect: true ,// 是否可以选择多个,默认为true;
                noUnselect: false,//default为false,选中后是否可以取消选中
                selectionRowHeaderWidth:30 ,//default为30,设置选择列的宽度
				//api
				onRegisterApi : function (gridApi) {
					$scope.gridApi = gridApi;
					$scope.gridApi.edit.on.afterCellEdit($scope,function(rowEntity){
						//编辑离开事件
					});

                    $scope.gridApi.selection.on.rowSelectionChanged($scope,function(row,event){
                       //行选中事件
                     });
				},

                //导出(只支持csv,扩展性不太好)
                exporterAllDataFn: function(){//导出全部
                       return getAllData();
                },
                exporterCsvColumnSeparator: ‘,‘,
                exporterCsvFilename:‘testdown.csv‘,
                exporterFieldCallback : function ( grid, row, col, value ){//导出回调可以过滤条件

					return value;
                },
                exporterHeaderFilterUseName : true,
                exporterMenuCsv : true,
                exporterMenuLabel : "Export",
                exporterMenuPdf : true,
                exporterOlderExcelCompatibility : false,//是否兼容低版本excel
                exporterPdfCustomFormatter : function ( docDefinition ) {
                 docDefinition.styles.footerStyle = { bold: true, fontSize: 10 };
                 return docDefinition;
                },
                exporterPdfFooter :{
                                     text: ‘‘,
                                     style: ‘‘
                                   },
                exporterPdfDefaultStyle : {
                  fontSize: 11,font:‘simblack‘ //font 设置自定义字体
                },
                exporterPdfFilename:‘testdown.pdf‘,
                exporterPdfFooter: function(currentPage, pageCount) {
                       return currentPage.toString() + ‘ of ‘ + pageCount;
                },
                exporterPdfHeader : function(currentPage, pageCount) {
                   return currentPage.toString() + ‘ of ‘ + pageCount;
                },
                exporterPdfMaxGridWidth : 720,
                exporterPdfOrientation : ‘landscape‘,//  ‘landscape‘ 或 ‘portrait‘ pdf横向或纵向
                exporterPdfPageSize : ‘A4‘,// ‘A4‘ or ‘LETTER‘
                exporterPdfTableHeaderStyle : {
                 bold: true,
                 fontSize: 12,
                 color: ‘black‘
                },
                exporterPdfTableLayout : null,
                exporterPdfTableStyle: {
                 margin: [0, 5, 0, 15]
                },
                exporterSuppressColumns : [‘name‘],//过滤不需要的列
                exporterSuppressMenu: false,
				//列属性设置
				 columnDefs: [{   field: ‘name‘,
                                 displayName: ‘名字‘,
                                 width: ‘100‘, //宽度设置
                                 enableColumnMenu: false,// 是否显示列头部菜单按钮
                                 //enableHiding: false,
                                 //suppressRemoveSort: true,
                                 enableCellEdit: false, // 是否可编辑
								 cellEditableCondition:function($scope){
									return boolean;//是否编辑控制
								 },
								 visible:true,是否显示default为true,
								 cellTemplate : ‘<a href="" ng-click="grid.appScope.viewPages(row.entity);">{{row.entity.name==1?"重写":""}}</a>‘,//重写cell
								 cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
								  //做一些判断。。。
								  return ‘red‘//自定义样式
								},
								 //cell下拉
								 editableCellTemplate: ‘ui-grid/dropdownEditor‘,
								 editDropdownOptionsArray: [],//[{name:1,nameText:‘Yoko‘}]
								 editDropdownIdLabel: ‘name‘,//id
								 editDropdownValueLabel: ‘nameText‘,//显示的名字

								 cellFilter:"nameFilet"//过滤器
                             }

                            ],
            };
          var myData=[{name:‘‘}];
        });

用到的自定义指令:

[javascript] view plain copy print?

  1. .directive(‘dblClickRow‘, [‘$compile‘, ‘$parse‘, function($compile, $parse) {
  2. return {
  3. priority : -190, // run after default uiGridCell directive
  4. restrict : ‘A‘,
  5. scope : false,
  6. compile: function($element, attr) {
  7. // Get the function at ng-dblclick for ui-grid
  8. var fn = $parse(attr[‘ngDblclick‘], /* interceptorFn */ null, /* expensiveChecks */ true);
  9. return function ngEventHandler(scope, element) {
  10. element.on(‘dblclick‘, function(event) {
  11. var callback = function() {
  12. if ($scope.gridApi.grid.selection.lastSelectedRow)
  13. {
  14. fn($scope, {$event:event, row: $scope.gridApi.grid.selection.lastSelectedRow.entity });
  15. }
  16. };
  17. $scope.$apply(callback);
  18. }
  19. )};
  20. }
  21. };
  22. } ])

.directive(‘dblClickRow‘, [‘$compile‘, ‘$parse‘, function($compile, $parse) {
		  return {
			priority : -190, // run after default uiGridCell directive
			restrict : ‘A‘,
			scope : false,

			compile: function($element, attr) {

				// Get the function at ng-dblclick for ui-grid
				var fn = $parse(attr[‘ngDblclick‘], /* interceptorFn */ null, /* expensiveChecks */ true);

				return function ngEventHandler(scope, element) {

					element.on(‘dblclick‘, function(event) {

					  var callback = function() {

						if ($scope.gridApi.grid.selection.lastSelectedRow)
						{
							fn($scope, {$event:event, row: $scope.gridApi.grid.selection.lastSelectedRow.entity });
						}
					  };

					  $scope.$apply(callback);

					}
				)};

			}

			};
		} ])

ui-grid  api:http://ui-grid.info/docs/#/api/

时间: 2024-10-29 19:07:06

[转]angularjs之ui-grid 使用详解的相关文章

LigerUI之Grid使用详解(三)——字典数据展示

一.问题概述 在开发web信息管理系统时,使用Web前端框架可以帮助我们快速搭建一组风格统一的界面效果,而且能够解决大多数浏览器兼容问题,提升开发效率.在关于LigerGrid的前两篇的内容里,给大家介绍了表格的基本的展示数据用法.(传送门:LigerUI之Grid使用详解(一)--显示数据 .LigerUi之Grid使用详解(二)--数据编辑 ) 在实际应用开发中,我们会经常遇到这样的场景,在展示业务数据的时候需要把业务数据中的参数项或者字典项的编码转换成参数名称或者字典名称展示出来.在这里本

《AngularJS》5个实例详解Directive(指令)机制(转)

转自大漠穷秋:http://damoqiongqiu.iteye.com/blog/1917971 感谢作者分享! <AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请期待口令:Angular 1.一点小说明 指令的作用:实现语义化标签 我们常用的HTML标签是这样的: <div> <span>一点点内容</span> &l

angularjs指令中的compile详解

篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link,post-link的用法与区别. angularjs里的指令非常神奇,允许你创建非常语义化以及高度重用的组件,可以理解为web components的先驱者. 网上已经有很多介绍怎么使用指令的

iOS开发——UI篇&amp;ScrollView详解

ScrollView详解 创建方式 1:StoryBoard/Xib 这里StoarBoard就不多说,直接拖就可以,说太多没意思,如果连这个都不会我只能先给你跪了! 2:代码: CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ; UIScrollView* scrollView = [ [UIScrollView alloc ] initWithFrame:bounds ]; 当你创建完滚动视图后,你可以将另一个视图的内

AngularJS语法基础及数据绑定——详解各种数据绑定指令、属性应用

AngularJS简单易学,但是功能强大.特别是在构建单页面应用方面效果显著.而 数据绑定 可以说是他被广泛使用的最主要的优点.他舍弃了对DOM的操作方式,一切都由AngularJS来自动更新视图,我们不必写操作dom的代码.接下来我们就详细解释下AngularJS中数据绑定的方式,及其具体的使用规则.技巧. 首先介绍下此次博客的内容: 1.第一部分,介绍最最基本的AngularJS的根应用.控制器的基本语法,为初学者准备的. 2.第二部分,详解如何数据绑定,3种绑定方式的区别.分别用于什么情况

angularjs中的路由介绍详解 ui-route(转)

http://www.cnblogs.com/littlemonk/p/5500801.html 这篇文章主要介绍了Angularjs中UI Router全攻略,涉及到angularjs ui router的基本用法,需要的朋友参考下吧 首先给大家介绍angular-ui-router的基本用法. 如何引用依赖angular-ui-router angular.module('app',["ui.router"]) .config(function($stateProvider){ $

LigerUI之Grid使用详解(一)——显示数据 --分页

http://www.cnblogs.com/jerehedu/p/4218560.html 首先给大家介绍最常用的数据展示组件Grid,使用步骤如下: 1.页面中正确引入样式文件及相应组件 <link href="<%=request.getContextPath()%>/ui/lib/ligerUI/skins/Aqua/css/ligerui-all.css" rel="stylesheet" type="text/css"

AngularJS开发指南16:AngularJS构建大型Web应用详解

AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇blog,分享了如何使用AngularJS构建大型Web应用的经验.这些经验对于使用其他JS框架构建大型应用的开发者也极具借鉴意义. 这篇blog特别关注的是大型应用程序,作者首先给出的建议是,尽量不要让应用变得太巨大.而应该编写小型.功能专注的.模块化的部分,然后逐渐把它们组合起来,变得越来越大,

android自定义UI模板图文详解

不知道大家在实际开发中有没有自定义过UI模板?今天花时间研究了一下android中自定义UI模板,与大家分享一下. 每个设计良好的App都是自定义标题栏,在自定义标题栏的过程中大部分人可能都是自定义一个标题的xml文件,然后在需要的地方直接通过include来引用,这比起在每个布局文件中写标题栏已经进化很多了,但仍然不是最简单有效的方法,我们为什么不能自定义一个标题控件呢?今天就带大家自己做一个标题栏控件.效果图如下: 开始啦: 第一步:自定义xml属性 新建一个android项目,在value

Android UI性能优化详解

设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的app UI是简单还是复杂,重要的是性能一定要好. UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑这个问题.研究表明,0-100毫秒以内的延迟对人来说