AngularJS表格神器“ui-grid”的應用


HTML:  (代碼僅用於解釋得更清楚,並未完全展示

<!doctype html>
<html ng-app="app">
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-touch.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-animate.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/csv.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/pdfmake.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/vfs_fonts.js"></script>
    <script src="/release/ui-grid.js"></script>
    <script src="/release/ui-grid.css"></script>
    <script src="app.js"></script>
  </head>
  <body>
    <div ng-controller="MainCtrl">
      <div id="user-grid" ui-grid="gridOptions" class="user-grid" ui-grid-resize-columns ui-grid-edit></div></div>
    </div>
  </body>
</html>

ui-grid-resize-columns:使列可以改變寬度,像這樣:

 

依賴注入

var app = angular.module('app', ['ngTouch', 'ui.grid', 'ui.grid.resizeColumns', 'ui.grid.moveColumns', 'ui.grid.edit', 'ui.grid.pagination']);

 app.controller('MainCtrl', ['$scope', function ($scope, i18nService) { i18nService.setCurrentLang("zh-cn"); $scope.gridOptions = { enableSorting: true,

          //編輯完成后執行事件

          onRegisterApi: function (gridApi) {
              $scope.gridApi = gridApi;
              $scope.gridApi.edit.on.afterCellEdit($scope, function (rowEntity) {
              //編輯離開事件
              $http.post('/manage/api/dictionary/update', {
              "accountName": rowEntity.accountName,
              "userName": rowEntity.userName,
              "unitName": rowEntity.unitName,
               })
                  .success(function (data) {
                     if (data.meta.success) {
                         alert('修改成功');
                     } else {
                     alert(data.meta.message);
                     }
               })
                   .error(function () {
                     toastr.warning("服務器出錯,無法獲取數據");
                   });
               });
              },

 columnDefs: [ {field: 'accountName', displayName:'手機號', width: 200}, {field: 'userName', displayName:'用戶名', width: 100}, {field: 'unitName', displayName:'單位', width: 300}, { field: 'createTime', displayName: '注冊時間', width: 200, cellTemplate: '<div class="ui-grid-cell-contents"><span ng-bind="grid.appScope.rDateFormat(row.entity.createTime)"></span></div>' }, { field: 'roleList', displayName: '類型', width: 200, cellTemplate: '<div class="ui-grid-cell-contents"><span ng-repeat="item in row.entity.roleList" style="margin-right:5px;">{{item.roleName}}</span></div>' }, { field: 'accountId', displayName: '詳細信息', width: 200, cellTemplate: '<div class="ui-grid-cell-contents">
<
button type="button"
ng-click
="grid.appScope.showAccountDetail(row.entity.roleList, row.entity.accountId)"
style="line-height: normal" class="btn-primary btn">查看詳情</button></div>' } ] };
$scope.gridOptions.data = [
{
'accountName':'15555555555',
'userName':'浮生若夢',
'unitName':'無',
'createTime':1506661676435,
'roleList':[{roleName:'前端','roleId':2},
{roleName:'后端','roleId':3}],
'accountId':201
},
          {
'accountName':'15555555555',
'userName':'浮生若夢',
'unitName':'無',
'createTime':1506661676435,
'roleList':[{roleName:'前端','roleId':2},
{roleName:'后端','roleId':3}],
'accountId':201
}
       ]

}]);
效果如下:

ui-grid使用中文:i18nService.setCurrentLang("zh-cn");
設置ui-grid格式:通過html中的ui-grid='gridOptions' (gridOptions可以自己定義) 再通過$scope.gridOptions來綁定
在上面的代碼中:
enableSorting:定義是否排序
對於列的定義columnDefs中:
field就是表格數據$scope.gridOptions.data中的字段,
displayName就是顯示在表格中的顯示的列項名,如果沒有定義,那么顯示的就是field的名稱

單元格編輯和提交到后台:
模塊依賴中加入ui.grid.edit ----> var app = angular.module('app', ['ui.grid.edit']); 添加指令ui-grid-edit到表格的<div>標簽中
列定義columnDefs中添加
enableCellEdit: true ----> columnDefs: [{field: 'dictionaryId', enableCellEdit: true, width: 150}]
單元格可編輯了,那編輯后的數據怎么提交到后台?
$scope.gridOptions = {}對象中添加該屬性
  onRegisterApi: function (gridApi) {
              $scope.gridApi = gridApi;
              $scope.gridApi.edit.on.afterCellEdit($scope, function (rowEntity) {//編輯完成后執行});
}
具體參考代碼。




ui-grid怎么單獨定義一個單元格的樣式?比如做成一個按鈕,點擊查看詳情
可以使用cellTemplate屬性,但是需要注意的是,單元格定義的html中如果要綁定函數,並不能像angular常規的來綁定,需要在綁定的函數前加上“grid.appScope”,比如“grid.appScope.func()”
ui-grid如果要將某行的某個數據傳入函數中需要使用這樣的形式:“row.entity.createTime”,creatTime就是你要傳入的參數的名稱(對應於“field”)
表格的數據可以通過請求后端接口來獲取,賦值給$scope.gridOptions.data,需要注意數據格式是否符合要求,否則就要先處理好。


有時候寬度全部用百分比時(這樣做的好處是可以根據表格寬度自適應調整列寬),發現列擠到一起了。我在項目中碰到的是一個頁面用到多張表格,通過ng-show來顯示相應表格,當用百分比布局時,發現列全擠到一起了,我當時的解決辦法是使用ng-if


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM