AngularJS ui-grid, сделать колонку редактируемой условно

0

Я использую AngularJS 1.5.5 и ui-grid 3.2.6.

У меня есть сетка с 5 столбцами. Col "4" - единственный столбец, редактируемый с помощью dropdownEditor, все остальные столбцы не редактируются.

Что мне нужно, если значение в столбце 4 изменяется, тогда мне нужно сделать редактирование столбца 5.

Я familier с cellEditableCondition. Но, я не уверен, как я могу использовать это свойство для удовлетворения этого требования.

Теги:
angular-ui-grid
ui-grid

1 ответ

0
Лучший ответ

Вы можете использовать временное свойство в сущности строки для отслеживания изменений столбца 4.

var app = angular.module('app', ['ngTouch', 'ui.grid','ui.grid.edit']);
var grid;
app.controller('MainCtrl', ['$scope', function ($scope) {

  var myData = [
    {
      id1:"1",id2:"2",id3:"3",id4:"4",id5:"5",
    },]

  var cellEditable = function($scope){
    if($scope.row.entity.oldId4===undefined)
      return false;
    return $scope.row.entity.oldId4!=$scope.row.entity.id4;
  }

  $scope.gridOptions = {
        enableFiltering: true,
         onRegisterApi: function(gridApi){
      grid = gridApi;
    },
    data: myData,
    columnDefs:[
        {
          field: 'id1',
          displayName: "id1",
          width: 100,

         enableCellEdit:true,
          cellEditableCondition : cellEditable
        },
        {
          field: 'id2',
          displayName: "id2",
          width: 100,

         enableCellEdit:true,
          cellEditableCondition : cellEditable
        },{
          field: 'id3',
          displayName: "id3",
          width: 100,
          enableCellEdit:true,
          cellEditableCondition : cellEditable
        },{
          field: 'id4',
          displayName: "id4",
          width: 100,
         enableCellEdit:true,
        },{
          field: 'id5',
          displayName: "id5",
          width: 100,
         enableCellEdit:true,
          cellEditableCondition : cellEditable
        },

    ],
}
 $scope.gridOptions.onRegisterApi = function(gridApi){
          //set gridApi on scope
          $scope.gridApi = gridApi;
          gridApi.edit.on.afterCellEdit($scope,function(rowEntity, colDef, newValue, oldValue){
            rowEntity.oldId4 = oldValue;
            $scope.$apply();
          });
        };

 $scope.test = function()
 {
   window.alert("Cell clicked")
 }
}]);

Здесь работает plnkr. http://plnkr.co/edit/wJfPkcBmpseaJjw20ct9?p=preview

  • 0
    Спасибо Катир. Это именно то, что я искал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню