2017-06-04 37 views
0

达到出厂功能范围我有一个NG-电网及其选项如下:所以有在细胞按钮如何AngularJS

$scope.gridOptions = { 
    enableRowSelection: true, 
    enableSelectAll: true, 
    selectionRowHeaderWidth: 35, 
    rowHeight: 35, 
    showGridFooter: false, 
    enableColumnMenus: false, 
    enableSorting: true, 
    enableFiltering: true, 
    columnDefs: [ 
     { 
      name: "", 
      field: "fake", 
      cellTemplate: '<div class="ui-grid-cell-contents" >' + 
      '<button value="Edit" ng-if="!row.inlineEdit.isEditModeOn" ng-click="row.inlineEdit.deleteRow($event)">Delete</button>' + 
      '<button value="Edit" ng-if="!row.inlineEdit.isEditModeOn" ng-click="row.inlineEdit.enterEditMode($event)">Edit</button>' + 
      '<button value="Edit" ng-if="row.inlineEdit.isEditModeOn" ng-click="row.inlineEdit.saveEdit($event)">Update</button>' + 
      '<button value="Edit" ng-if="row.inlineEdit.isEditModeOn" ng-click="row.inlineEdit.cancelEdit($event)">Cancel</button>' + 
      '</div>', 
      enableCellEdit: false, 
      enableFiltering: false, 
      enableSorting: false, 
      showSortMenu: false, 
      enableColumnMenu: false, 
      width: "10%" 
     }, 
     { 
      name: 'Id', 
      visible: false 
     }, 
     { 
      name: 'Key', 
      enableCellEdit: true, 
      cellTemplate: '<div class="ui-grid-cell-contents"><div ng-class="{\'viewr-dirty\' : row.inlineEdit.entity[col.field].isValueChanged }">{{row.entity[col.field]}}</div></div>', 
      width: "30%" 
     }, 

     { 
      name: 'Value', 
      enableCellEdit: true, 
      cellTemplate: '<div class="ui-grid-cell-contents"><div ng-class="{\'viewr-dirty\' : row.inlineEdit.entity[col.field].isValueChanged }">{{row.entity[col.field]}}</div></div>', 
      width: "30%" 
     } 

    ] 
} 

我使用在线编辑。其中一个按钮是删除。当我点击这个按钮时,记录从数据库中删除。不过,我希望在删除操作完成后刷新网格。我调用函数从工厂:

angular.module('ui.grid').factory('InlineEdit', function ($interval, $rootScope, $mdDialog, LocalizationService, AlertDialogFactory) { 
function inlineEdit(entity, index, grid) { 
    this.grid = grid; 
    this.index = index; 
    this.entity = {}; 
    this.isEditModeOn = false; 
    this.init(entity); 
} 

inlineEdit.prototype = { 
    init: function (rawEntity) { 
     var self = this; 

     for (var prop in rawEntity) { 
      self.entity[prop] = { 
       value: rawEntity[prop], 
       isValueChanged: false, 
       isSave: false, 
       isCancel: false, 
       isEdit: false 
      } 
     } 
    }, 

    deleteRow: function (event) { 
     event && event.stopPropagation(); 
     var self = this; 

     self.isEditModeOn = false; 

     for (var prop in self.entity) { 
      self.entity[prop].isSave = true; 
      self.entity[prop].isEdit = false; 
     } 
     LocalizationService.deleteRow(self.grid.rows[self.index]).then(function (result) { 
      if (result.data.IsOk) { 
       // CODE HERE... 
      } 
      else { 
       AlertDialogFactory.ShowAlertDialog(result.data.Message, "ERROR"); 
      } 
     }); 
    }, 
} 
    return inlineEdit; 
}) 

如果result.data.IsOk是真实的,我怎么能刷新gridOptions.data从工厂函数?我怎样才能从工厂范围?

回答

0

作为解决方案,您可以从$ rootScope广播一个事件。 这将是这样的:

$rootScope.$broadcast("rowDeleted"); 

而且在你有机会获得$范围的地方处理该事件。

$scope.$on("rowDeleted", deleteHandler); 
+0

我一直在处理这个问题2天。我已经解决了,谢谢你。 –

+0

不客气。正如我所看到的,您对ng使用相同的条件 - 如果为了定义是否应该呈现“编辑”和“删除”按钮或者“更新”和“取消”。最好为这两对按钮添加一些包装,并且仅对那些包装使用ng-if指令。在这种情况下,每个单元格只有2纳克 - 而不是4个。这种方法可以提高网格的性能。 –