Как модальный сервис angular $ взаимодействует с DOM?

#angularjs #angular-ui #ng-grid

#angularjs #angular-пользовательский интерфейс #ng-grid

Вопрос:

У меня странная проблема, когда простое внедрение модального сервиса $ в мое приложение приводит к странному поведению экземпляра ngGrid — ngCanvas (и содержащиеся в нем строки), похоже, считают, что он должен быть на 100 пикселей короче, чем содержащий элемент.

Мой вопрос таков: когда внедряется модальный сервис $, сразу ли он каким-либо образом взаимодействует с DOM? Я предполагаю, что ответ «да», но я не смог узнать это из исходного кода.

Редактировать: С использованием angular-bootstrap 0.7.0, angular 1.2.7

Пример того, как я использую $modal и $modalInstance:

Это находится в главном контроллере для подготовки $ modal:

  var modalOptions = {
  dialogClass: 'modal admin-modal admin',
  dialogFade: true,
  backdropFade: true,
  keyboard: true,
  scope: $scope
};

$scope.unlockAccounts = function() {
  var options = _.extend(modalOptions, {
    templateUrl: '/admin/generic_users_modal.tpl.html',
    controller: 'AccountUnlockModalController'
  });

 $modal.open(options).result.then(function(res) {
   if(res) {
     while($scope.selectedUsers.length) {
       $scope.selectedUsers.pop();
     }
   }
 });
};
  

Это модальный контроллер:

   module.controller('AccountUnlockModalController', ['$scope', '$modalInstance', 'UserAPI', '$log', function($scope, $modalInstance, UserAPI, $log) {

    $scope.templateConfig = {
      description: 'unlock',
      buttonText: 'Unlock accounts',
      userPlurality: function() {
        return $scope.selectedUsers amp;amp; $scope.selectedUsers.length > 1 ? 'these accounts' : 'this account';
      }
    };

    $scope.closeModal = function() {
      // passing through false to clarify that no deselection should take place
      $modalInstance.close(false);
    };

    $scope.modalFunction = function() {
      var errs = [];
      _.each($scope.selectedUsers, function(user) {
        UserAPI.unlockAccount(user.email).then(function(res) {
          if(res.status !== 200) {
            errs.push(res);
          }
        })
      });
      if(errs.length) console.warn(errs);
      // passing through false to clarify that users should be deselected
      $modalInstance.close(true);
    };
  }]);
  

Если есть что-то еще, что вы хотели бы увидеть, я рад это доработать. Спасибо!

Комментарии:

1. Есть причина, по которой вы используете версию 7 UI Bootstrap, сейчас она находится в версии 11. Я не раз обнаруживал, что простое обновление может устранить подобные проблемы (при этом нарушая другие, если быть справедливым)

2. Да, создается поверх приложения приличного размера. Не готов иметь дело со всеми критическими изменениями. Возможно, стоит покопаться в исходном коде v1.1 $ modal, чтобы посмотреть, что изменилось. Черт возьми, я решил свою конкретную проблему, просто присвоив каждому столбцу определенную ширину.