Как автоматически добавить вновь сохраненную запись в сетку?

0

Я изучаю углы и весну. У меня есть листинг экрана, где я использовал угловую ui-сетку. На экране с листингом есть предложение добавить новую запись, нажав кнопку и всплыв. Теперь, когда пользователь добавил запись через всплывающее окно, но ее не отразили в сетке даже после того, как запись была успешно сохранена в базе данных. Может ли кто-нибудь помочь мне нажать запись в сетку после сохранения базы данных?.

html для экрана листинга

<md-card flex >
    <div ui-grid=" vehicleGrid" ui-grid-exporter ui-grid-selection class="myGrid"></div>
</md-card> 

<md-button class="md-fab md-fab-bottom-right md-accent" aria-label="Add Vehicle" ui-sref="vehicle_mgmnt.add">
    <md-icon>add</md-icon>
</md-button>

Контроллер - контроллер vehicle_mgmnt

angular.module('trackzApp')
  .controller('VehicleMgmntController', function($scope, $mdDialog, $mdMedia, Principal, Vehicle, ParseLinks, Language, uiGridConstants) {
      //$scope.users = [];
      $scope.authorities = ["ROLE_USER", "ROLE_ADMIN"];
      Language.getAll().then(function(languages) {
        $scope.languages = languages;
      });

      Principal.identity().then(function(account) {
        $scope.currentAccount = account;
      });
      $scope.customFullscreen = $mdMedia('xs') || $mdMedia('sm');
      // $scope.page = 1;
      $scope.vehicleGrid = {
        showGridFooter: true,
        showColumnFooter: true,
        enableFiltering: true,
        exporterMenuCsv: true,
        enableGridMenu: true,
        columnDefs: [{
          field: 'company'
        }, {
          field: 'vehicleCode'
        }, {
          field: 'vehicleName'
        }, {
          field: 'regn_no'
        }, {
          field: 'vehicleType'
        }, {
          field: 'manufacturer'
        }, ],
        onRegisterApi: function(gridApi) {
          $scope.gridApi = gridApi;
        }
      }
      $scope.loadAll = function() {
        Vehicle.query({}, function(result, headers) {
          $scope.links = ParseLinks.parse(headers('link'));
          $scope.totalItems = headers('X-Total-Count');
          // $scope.users = result;
          $scope.vehicleGrid.data = result;
        });

      };

      $scope.loadAll();
    }

Контроллер для всплывающего экрана.

angular.module('trackzApp').controller('VehicleMgmntAddDialogController', ['$scope', '$stateParams', '$mdDialog', '$mdMedia', 'Vehicle', 'Language',
  function($scope, $stateParams, $mdDialog, $mdMedia, Vehicle, Language) {

    // $scope.user = entity;
    $scope.authorities = ["ROLE_USER", "ROLE_ADMIN"];
    Language.getAll().then(function(languages) {
      $scope.languages = languages;
    });
    var onSaveSuccess = function(result) {
      $scope.isSaving = false;
      //$uibModalInstance.close(result);
      $mdDialog.hide();
    };

    var onSaveError = function(result) {
      $scope.isSaving = false;
    };


    $scope.save = function() {
      $scope.isSaving = true;
      /*if ($scope.user.id != null) {
          User.update($scope.user, onSaveSuccess, onSaveError);
      } else {*/
      Vehicle.save($scope.vehicle, onSaveSuccess, onSaveError);
      $scope.$parent.vehicleGrid.push(vehicle);
      // }

    };

    $scope.hide = function() {
      $mdDialog.hide();
    };
    $scope.cancel = function() {
      $mdDialog.cancel();
    };

    $scope.clear = function() {
      // $uibModalInstance.dismiss('cancel');
    };

  }
]);
Теги:

1 ответ

0

1, я думаю, у вас есть проблема с опечатками:

В вашем контроллере VehicleMgmntController данные, возвращаемые с сервера, хранятся в:

$ scope.vehicleGrid.data = result;

Но в вашем модальном коде вы хотите нажать что-то в транспортном средстве, которое содержит данные настройки сетки, а не источник данных.

$scope.save = function() {
      $scope.isSaving = true;
      /*if ($scope.user.id != null) {
          User.update($scope.user, onSaveSuccess, onSaveError);
      } else {*/
      Vehicle.save($scope.vehicle, onSaveSuccess, onSaveError);
      $scope.$parent.vehicleGrid.push(vehicle);
      //try this:
      $scope.$parent.vehicleGrid.data.push(vehicle);          
      // }

    };

Я думаю, что обслуживание автомобиля возвращается с недавно добавленным автомобилем, не так ли?

2, у меня есть ощущение, что вы onSAveSuccess запускаются позже, чем ваш Vehicle.save. Считаете ли вы, что использовать синтаксис.then() для решения обещаний?

$scope.save = function() {
      $scope.isSaving = true;
      /*if ($scope.user.id != null) {
          User.update($scope.user, onSaveSuccess, onSaveError);
      } else {*/
      Vehicle.save($scope.vehicle).then(function(result) {
             $scope.$parent.vehicleGrid.data.push(vehicle);
      }, function(error){
            //some error handling
      });

      // }

    };
  • 0
    Спасибо СаюсиАндо. Похоже, это не работает. Есть ли проблема при доступе к нему с помощью $ scope. $ Parent? .. Как я могу определить контроллер экрана управления транспортным средством в качестве родителя всплывающего экрана?

Ещё вопросы

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