Angularjs 动态启用单元格编辑

Angularjs 动态启用单元格编辑,angularjs,ng-grid,Angularjs,Ng Grid,我试图弄清楚如何根据行中的信息在单元格上动态设置enableCellEdit。例如,类似于: $scope.gridOpts = { data: 'mydata', columnDefs: [{field: 'sometimesIEdit', enableCellEdit:row.isEditable}] } 显然,row在这种情况下不可用。也许enableCellEdit只是在列级别上进行评估,而不是在单元格级别上进行评估,这使得我想做的事情变得不可能——我不确定 我知道,作

我试图弄清楚如何根据行中的信息在单元格上动态设置enableCellEdit。例如,类似于:

$scope.gridOpts = {
    data: 'mydata',
    columnDefs: [{field: 'sometimesIEdit', enableCellEdit:row.isEditable}]
}
显然,row在这种情况下不可用。也许enableCellEdit只是在列级别上进行评估,而不是在单元格级别上进行评估,这使得我想做的事情变得不可能——我不确定


我知道,作为一种解决方法,我可以将editableCellTemplate与ng if结合使用来显示纯文本,但我宁愿单元格永远都不可编辑。

这很旧,但我想我还是会尝试回答。我遇到了完全相同的问题,并使用该专栏的editableCellTemplate解决了这个问题。这是我使用的模板,如下所示:

var editableCellTemplate = '<div class="email" ng-edit-cell-if="isFocused && '
    + 'row.entity.canEdit">'
    + '<input ng-class="\'colt\' + col.index" ng-input="COL_FIELD" '
    + 'ng-model="COL_FIELD" />'
    + '</div>'
    + '<div ng-edit-cell-if="isFocused">'
    + '<div class="ngCellText" ng-class="col.colIndex()"><span ng-cell-text>'
    + '{{COL_FIELD}}</span></div>'
    + '</div>'
    + '</div>';
var-editableCellTemplate=''
+ ''
+ ''
+ ''
+ ''
+“{{COL_FIELD}}”
+ ''
+ '';

因此,只有当行实体的canEdit等于true时,才能编辑该单元格

另一个解决方案是修饰ng grid的指令之一。 在本例中,“ngCellHasFocusDirective”

基本逻辑是防止在不满足条件时触发事件

使用此方法,可以在行中的另一个单元格发生更改时控制单元格的编辑。 我确信当编辑行中的另一个单元格时,“CellTemplate”解决方案是否有效,并且此编辑的结果应禁用该行中另一个单元格的单元格编辑。 这是因为单元格更改激活了单元格$scope上的$digest,我不相信$digest是在行$scope上触发的

在下面的这个要点链接中,我为“ngCellHasFocus”指令编写了一个decorator,该指令触发“columnDef”中定义的函数,该函数返回TRUE或FALSE、editable或not

包括一个考试。
要点:

老问题,但由于我们需要维护一个仍然使用ng grid(>=2.0.9)的应用程序,我想我应该回答

正如docs()中所述,您可以在columnDef或Options对象中指定
cellEditableCondition:boolean

它还需要
enableCellEdit:“表达式”

示例是从上面的链接中提取的

$scope.gridOptions = { 
    data: myDataSource,
    enableCellSelection: true,
    enableCellEditOnFocus: true,
    cellEditableCondition: 'row.entity.editable',
    columnDefs: [
     { field: 'firstName', displayName: 'First Name', width: "*", resizable: false, enableCellEdit: false},
     { field: 'lastName', displayName: 'First Name', width: "20%"},
     { field: 'address', displayName: 'Last Name', width: "*" , 
       cellEditableCondition: 'row.entity.editable && !row.entity.isAddressDefined()'},
     { field: 'age', cellClass: 'ageCell', headerCellClass: 'ageHeader', width: "**"}]
};

对我来说,唯一有效的解决方案是将其用作函数:

cellEditableCondition: function ($scope) { return $scope.row.entity.isEditable }