使用ng-grid中的ngGridEventEndCellEdit进行特定字段更改

时间:2014-09-08 08:06:30

标签: javascript angularjs ng-grid

我在ngGridEventEndCellEdit模块中遇到了ng-grid的问题。

我的目的是当我在ng-grid中更改一个单元格时,我从我的服务中调用一个方法,该方法通过ajax请求返回一些数据。我的代码运行正常。但唯一的问题是,当我更改任何单元格或字段时,它会调用服务方法。

我如何检查特定单元格是否编辑???

关注是我的代码段...

$scope.$on('ngGridEventEndCellEdit', function (data) {
            console.log(data.targetScope.row);
            costsheetCrudService.getItemByItemCode(data.targetScope.row.entity.ItemCode).then(function (res) {
                data.targetScope.row.entity.ItemDescription = res.data.ItemDescription;
                data.targetScope.row.entity.ItemCategory = res.data.ItemCategoryName;
                data.targetScope.row.entity.ItemID = res.data.ItemID;
                data.targetScope.row.entity.ItemCategoryID = res.data.ItemCategoryID;
            });
        });

1 个答案:

答案 0 :(得分:1)

来自documentation on templating

  

编辑单元格时,ng-cell-has-focus指令将广播名为 ngGridEventStartCellEdit 的消息,让所有孩子都知道   你现在可以给自己专注。可编辑单元格模板时   完成编辑(通常在模糊事件上)你需要发射    ngGridEventEndCellEdit 让ng-cell-has-focus知道你已经完成了   编辑,然后它将显示不可编辑的单元格模板。该   对此的推理是(好的引用):"现在我可以包装我的输入元素   在divs / span中,无论如何并控制究竟是什么元素的模糊   触发结束编辑" - @swalters。

     

如果您搜索  ngInput' ng-rgid源代码中的指令,   你会发现这正是这个指令实现的目的   输入元素。 因此,如果您需要创建自己的“细胞编辑器”,那么就是您   可以创建自己的指令,听取和发出   正确的事件,使您的组件按预期工作。

一个例子(用于ng-input指令):

scope.$on( 'ngGridEventStartCellEdit', function () {
  elm.focus(); 
}); //focus the input element on 'start cell edit'

angular.element( elm ).bind( 'blur', function () {
  scope.$emit( 'ngGridEventEndCellEdit' );
}); //when leaving the input element, emit the 'end cell edit' event

否则,您可以在发出事件时在控制器内添加逻辑:

if(data.targetScope.col.index === X) {}
if(data.targetScope.row.rowIndex === X) {}
if(data.targetScope.row.entity.something === something else) {}.