Передайте текущую область действия 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;
}
}
});
Любые лучшие идеи?
Ответы
Ответ 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) {
...
}
Затем я могу использовать "родительский" для непосредственного доступа к области родительского контроллера.
Надеюсь, это поможет кому-то еще.