AngularJS $modalInstance - puis-je faire dans un contrôleur?

J'ai passé un certain temps à en avoir un pour jouer avec le Bootstrap, AngularJS pop-up, et pour les intentions c'est vraiment génial de travailler, mais ce que je voudrais faire est de lier, et c'est à charge de script pour le même contrôleur, ce que je ne peux pas obtenir de travail est le bouton fermer maintenant. Si je créer un NOUVEAU contrôleur, et d'injecter $modalInstance il fonctionne très bien et je peux wireup le bouton fermer sans aucun problème du tout, mais je ne veux pas d'un deuxième contrôleur, il semble être plus de complication: je veux que tous mes contrôleur de logique dans le formController vraiment.

Pourquoi je veux en fait deux contrôleurs? En passant de la portée entre deux contrôleurs semble exagéré pour moi, et le plus grand, un projet devient le plus non-gérable qu'il deviendra. Suis-je en essayant de sur-simplifier cette inutilement? 🙂

Le script:

(function(){
    var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
    .controller('formController', function($scope, $modal){
        $scope.openModal = function () {                        
            var modalInstance = $modal.open({
                templateUrl: 'SomeModal.html',
                controller: 'formController'                                            
            });
        };
        $scope.closeModal = function () {
            // Code needed here :)
        };
    })
})();

Le corps HTML (excusez le code HTML dans le script pour les besoins de la DÉMONSTRATION):

    <div ng-controller="formController">
        <button class="btn btn-default" ng-click="openModal()">Let's do some stuff!</button>

        <script type="text/ng-template" id="SomeModal.html">
            <div class="modal-header">Do some stuff in this modal y'all.</div>
            <div class="modal-footer">
                <button class="btn btn-info" ng-click="closeModal()">Close</button>
            </div>
        </script>
    </div>

La réponse repose sur Kaspars' entrée 🙂

    (function(){
            var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
            .controller('formController', function($scope, $modal, $log){
                $scope.openModal = function () {                        
                    var modalInstance = $modal.open({
                        templateUrl: 'SomeModal.html',
                        controller: [
                            '$scope', '$modalInstance', function($scope, $modalInstance){
                                $scope.closeModal = function () {
                                    $modalInstance.close();
                                };
                            }
                        ]                           
                    });
                };
            })
        })();
un modal distincte contrôleur fonctionne très bien, si le modal est destiné à être partagé par de nombreux contrôleurs

OriginalL'auteur NewZeroRiot | 2015-04-05