Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS$modalInstance-我可以在一个控制器中执行此操作吗?_Angularjs_Angular Ui_Bootstrap Modal - Fatal编程技术网

AngularJS$modalInstance-我可以在一个控制器中执行此操作吗?

AngularJS$modalInstance-我可以在一个控制器中执行此操作吗?,angularjs,angular-ui,bootstrap-modal,Angularjs,Angular Ui,Bootstrap Modal,我花了一些时间玩AngularJS引导程序弹出窗口,它工作得很好,但我想做的是将它绑定,它依赖于同一个控制器的脚本,但我现在无法工作的是关闭按钮。如果我创建了一个新的控制器,并注入$modalInstance,它工作得很好,我可以连接关闭按钮而没有任何问题,但我不想要第二个控制器,它似乎过于复杂:我希望所有的控制器逻辑都在formController中 为什么我真的需要两个控制器?在两个控制器之间传递作用域对我来说似乎有些过分,项目越大,它就越不可管理。我是否试图不必要地过度简化这个问题?:)

我花了一些时间玩AngularJS引导程序弹出窗口,它工作得很好,但我想做的是将它绑定,它依赖于同一个控制器的脚本,但我现在无法工作的是关闭按钮。如果我创建了一个新的控制器,并注入$modalInstance,它工作得很好,我可以连接关闭按钮而没有任何问题,但我不想要第二个控制器,它似乎过于复杂:我希望所有的控制器逻辑都在formController中

为什么我真的需要两个控制器?在两个控制器之间传递作用域对我来说似乎有些过分,项目越大,它就越不可管理。我是否试图不必要地过度简化这个问题?:)

剧本:

(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 :)
        };
    })
})();
HTML正文(为了演示的目的,请在脚本中省略HTML):


我也遇到了同样的问题,我想到的最好的办法就是使用匿名函数作为模态控制器。这样,所有逻辑都在同一个控制器中,您不必为每个模式窗口创建单独的控制器

这看起来像这样:

(function(){
    var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
    .controller('formController', function($scope, $modal){
        $scope.openModal = function () {                        
            var modalInstance = $modal.open({
                templateUrl: 'SomeModal.html',
                controller: [
                    '$scope', '$modalInstance', 'data', function($scope, $modalInstance, data) {
                        $scope.data = data;
                        $scope.ok = function() {
                            $modalInstance.close();
                        };
                        $scope.closeModal = function() {
                            $modalInstance.dismiss();
                        };
                    }
                ]
            });
        };
    })
})();
另外,您还没有测试过上面的代码,只需将您提供的代码和我的一个项目中的片段组合在一起即可。

您也可以试试这个

    var modalInstance = $modal.open({
                                templateUrl : 'someTemplate.html',
                                scope : $scope,
                                size : 'md'
                            });

感谢Kaspars,这很有效,我添加了我简化的实际代码,以参考原始问题:)一个单独的模态控制器非常有效,如果模态将被许多控制器共享
(function(){
    var app = angular.module('ngModalDemo', ['ui.bootstrap']) 
    .controller('formController', function($scope, $modal){
        $scope.openModal = function () {                        
            var modalInstance = $modal.open({
                templateUrl: 'SomeModal.html',
                controller: [
                    '$scope', '$modalInstance', 'data', function($scope, $modalInstance, data) {
                        $scope.data = data;
                        $scope.ok = function() {
                            $modalInstance.close();
                        };
                        $scope.closeModal = function() {
                            $modalInstance.dismiss();
                        };
                    }
                ]
            });
        };
    })
})();
    var modalInstance = $modal.open({
                                templateUrl : 'someTemplate.html',
                                scope : $scope,
                                size : 'md'
                            });