AngularJS $ modalInstance - Kann ich dies in einem Controller tun?

Ich habe einige Zeit damit verbracht, mit dem AngularJS Bootstrap-Popup zu spielen, und in der Absicht funktioniert es großartig, aber ich möchte es binden und es ist ein abhängiges Skript für denselben Controller, was ich nicht bekommen kann arbeiten ist jetzt allerdings die schliess-taste. Wenn ich einen NEUEN Controller erstelle und $ modalInstance einspeise, funktioniert das großartig und ich kann den Schließen-Button ohne Probleme verkabeln, aber ich möchte keinen zweiten Controller, es scheint übermäßig kompliziert zu sein: Ich möchte meine gesamte Controller-Logik im formController wirklich.

Warum möchte ich eigentlich zwei Controller? Das Übergeben des Bereichs zwischen zwei Controllern erscheint mir einfach übertrieben, und je größer ein Projekt wird, desto unüberschaubarer wird es. Versuche ich, dies unnötig zu vereinfachen? :)

Das Drehbuch:

(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 :)
        };
    })
})();

Der HTML-Body (entschuldigen Sie das HTML im Skript für die Zwecke der DEMO):

    <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>

Die Antwort basiert auf Kaspars 'Eingabe:)

    (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();
                                };
                            }
                        ]                           
                    });
                };
            })
        })();

Antworten auf die Frage(4)

Ihre Antwort auf die Frage