Подтвердить что ты не робот

Передайте текущую область действия modalInstance при использовании синтаксиса controllerAs

Я использую синтаксис controllerAs, чтобы избежать супа $scope в моих контроллерах, а также используя ui.bootstrap для представления модального представления.

Мне нужно открыть modalInstace, который имеет ту же область действия, что и текущий контроллер. Когда вы вводите область видимости, вы, вероятно, можете сделать что-то вроде:

var modalInstance = $uibModal.open({
      templateUrl: 'addEditModal.html',
      scope: $scope
    });

Однако, поскольку я не впрыскиваю область действия и не использую синтаксис controllerAs, это не сработает.

Из того, что я нашел, вам нужно будет использовать разрешение для передачи данных, но вы должны передать его явно через функции. Есть ли способ передать всю область?

Есть куча вещей, которые мне нужно сделать в этом модальном режиме, и пропущенные грузы данных кажутся излишними.

Не хочу этого делать, потому что это кажется грязным...

var modalInstance = $modal.open({
  templateUrl: 'myModalContent.html',
  controller: 'ModalInstanceCtrl',
  resolve: {
    user: function() {
        return vm.user;
    },
    something: function() {
        return vm.something;
    },
    blah: function() {
        return blah;
    }
  }
});

Любые лучшие идеи?

4b9b3361

Ответ 1

Мне нужно открыть modalInstace, который имеет ту же область действия, что и текущий контроллер.

Модальный сервис создает унаследованную область. И

var modalInstance = $uibModal.open({
  templateUrl: 'addEditModal.html',
  scope: $scope
});

не вводит область действия, а задает родительскую область для модального контроллера (иначе корневая область будет использоваться как родительская).

Поскольку controllerAs использовался в родительском контроллере, модальный контроллер будет иметь доступ к унаследованному объекту vm в своей области.

Ответ 2

Не уверен. Если я правильно понял, но я получил его, работая, передавая/впрыскивая текущий "controllerAs" в параметр разрешения

var modalInstance = $uibModal.open({
      templateUrl: 'addEditModal.html',
      controller: 'AudioItemAddEditCtrl as vm',
      resolve: {
        parent: function(){
            return vm
        }
    }
    });

И затем, в AudioItemAddEditCtrl...

var AudioItemAddEditCtrl = function(parent, AudioItemService, $ModalInstance) {
...
}

Затем я могу использовать "родительский" для непосредственного доступа к области родительского контроллера.

Надеюсь, это поможет кому-то еще.