Passer la portée actuelle à modalInstance lors de l'utilisation de la syntaxe du contrôleur

J'utilise la syntaxe de controllerAs pour éviter une soupe $ scope dans mes contrôleurs, et j'utilise ui.bootstrap pour présenter une vue modal.

Je dois ouvrir une modalInstace qui partage la même portée que le contrôleur actuel. Lors de l'injection de la portée, vous pourriez probablement faire quelque chose comme:

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

Cependant, comme je n'injecte pas la portée, et j'utilise la syntaxe du contrôleur, cela ne fonctionnera pas.

D'après ce que j'ai trouvé, vous devrez utiliser la résolution pour transmettre les données, mais vous devez le passer explicitement par des fonctions. Existe-t-il un moyen de passer toute la portée?

Il y a tout un tas de choses que je dois faire pour que les données modales et passantes de données semblent en excès.

Ne veulent pas le faire, car il semble désordonné …

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

Des idées meilleures?

Je dois ouvrir une modalInstace qui partage la même portée que le contrôleur actuel.

Le service modal crée une portée héritée . Et

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

N'injecte pas la portée, mais spécifie la portée parentale pour le contrôleur modal (autrement, la portée racine sera utilisée comme parent).

Puisque controllerAs a été utilisé sur le contrôleur parent, le contrôleur modal aura accès à l'objet vm hérité sur sa portée.

Pas sûr Si j'ai bien compris, mais je l'ai fait fonctionner en passant / injecte le «contrôleur» actuel dans le paramètre de résolution

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

Et puis, dans AudioItemAddEditCtrl …

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

Ensuite, je peux utiliser «parent» pour accéder directement à la portée du contrôleur parent.

J'espère que ceci aide quelqu'un d'autre.