在AngularJS UI Bootstrap Modal中调用另一个控制器

时间:2014-06-10 22:12:32

标签: angularjs angular-ui-bootstrap

我有一个完全正常工作的ui.bootstrap.modal版本,例如http://angular-ui.github.io/bootstrap/#/modal中的示例,但我想进一步将其添加到我的控制器配置中。

也许我太过分了(或做错了)但是我不喜欢

var ModalInstanceCtrl = function ($scope...

我的模态打开控制器:

var controllers = angular.module('myapp.controllers', []);


controllers.controller('ModalDemoCtrl', ['$scope', '$modal', '$log',
    function($scope,  $modal, $log) {

        $scope.client = {};

        $scope.open = function(size) {
            var modalInstance = $modal.open({
                templateUrl: 'templates/modals/create.html',
                controller: ModalInstanceCtrl,
                backdrop: 'static',
                size: size,
                resolve: {
                    client: function () {
                        return $scope.client;
                    }
                }
            });

            modalInstance.result.then(function (selectedItem) {
                $log.info('Save changes at: ' + new Date());
            }, function () {
                $log.info('Closed at: ' + new Date());
            });
        };
    }
]);

模态实例控制器:

var ModalInstanceCtrl = function ($scope, $modalInstance, client) {

    $scope.client = client;

    $scope.save = function () {
        $modalInstance.close(client);
    };

    $scope.cancel = function () {
        $modalInstance.dismiss('cancel');
    };
};

但是我想将最后一个控制器更改为:

controllers.controller('ModalInstanceCtrl', ['$scope', '$modalInstance', 'client',
    function ($scope, $modalInstance, client) {

        $scope.client = client;


        $scope.save = function () {
            $modalInstance.close(client);
        };

        $scope.cancel = function () {
            $modalInstance.dismiss('cancel');
        };
    }
]);

如果我还将$ scope.open中的控制器引用更新为ModalDemoCtrl控制器

controller: controllers.ModalInstanceCtrl

然后没有错误,但模态窗口中的保存和取消按钮不再有效。

有人可以指出我出错的地方 - 可能是对AngularJS中控制器工作方式的基本缺乏理解?!

2 个答案:

答案 0 :(得分:2)

$ scope.open中指定的控制器需要单引号。

 controller: 'ModalInstanceCtrl',

答案 1 :(得分:0)

您正在将模块引用到变量控制器

角度系统中的所有控制器都具有唯一名称

控制器仍然是" ModalInstanceCtrl "不是" controllers.ModalInstanceCtrl"。