Передать текущую область видимости в 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;
    }
  }
});

Есть идеи получше?

2 ответа

Решение

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

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

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

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

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

Не уверен, правильно ли я понял, но у меня все получилось, передав / введя текущие 'controllerAs' в параметре разрешения

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

А затем в AudioItemAddEditCtrl...

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

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

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

Другие вопросы по тегам