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