如何在控制器“即时创建”时使用控制器阵列表示法"?

时间:2014-09-26 16:21:31

标签: angularjs

我知道如何在控制器中使用Angular的数组表示法,并在应用程序中使用#34;如下所示:

angular.module('appName').controller('controllerName', ['$scope', '$http', function ($scope, $http) {
}]);

但是,如果我有一个使用的控制器"在飞行中怎么办?"

我有一个指令,创建一个由创建的控制器控制的bootstrap-ui模式"当下",这是代码:

angular.module('appName').directive('ngConfirmClick', ['$modal', function($modal) {

    // Controller "on the fly"       
    var modalController = function($scope, $modalInstance) {
        $scope.ok = function() {
            $modalInstance.close();
        };

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

    return {
        restrict: 'A',
        scope: {
            ngConfirmClick:"&"
        },
        link: function(scope, element, attrs) {
            element.bind('click', function() {
                var message = attrs.ngConfirmMessage || "Really?";

                var modalHtml = '<div class="modal-header"><h3 class="modal-title">Confirm</h3></div>'
                                + '<div class="modal-body">' + message + '</div>'
                                + '<div class="modal-footer"><button class="btn btn-default" ng-click="ok()">OK</button>'
                                + '<button class="btn btn-default" ng-click="cancel()">Cancel</button></div>';

                var modalInstance = $modal.open({
                    template: modalHtml,
                    controller: modalController, // Controller reference
                    backdrop: false,
                });

                modalInstance.result.then(function() {
                    scope.ngConfirmClick();
                }, function() {
                });
            });
        }
    }
}]);

问题是......我如何在这里使用数组表示法?

    // Controller "on the fly"       
    var modalController = function($scope, $modalInstance) {
        ...
    };

我知道我可以像通常使用可重复使用的控制器一样注册控制器(参见我的第一段代码)......但是:我应该吗?这是唯一的方法吗?



如果这样陈述,这个问题可以被抽象出来并对其他人有所帮助:
如果指令需要创建/使用控制器,并且该控制器仅由该指令使用而没有其他人......应该如何创建控制器?在应用程序内?在什么?

2 个答案:

答案 0 :(得分:2)

您可以添加$inject属性...

// Controller "on the fly"       
var modalController = function($scope, $modalInstance) {
    ...
};
modalController.$inject = ['$scope', '$modalInstance'];

答案 1 :(得分:1)

您正在做的事情已经很好了,您只需要使用数组表示法分配modalController。您不需要将其作为可重复使用的控制器添加到应用程序中,因为它仅在指令中使用。

JAVASCRIPT

var modalController = ['$scope', '$modalInstance', function($scope, $modalInstance) {
    $scope.ok = function() {
        $modalInstance.close();
    };

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

或者,您也可以使用$inject属性添加依赖项。

var modalController = function($scope, $modalInstance) {
    $scope.ok = function() {
        $modalInstance.close();
    };

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

modalController.$inject = ['$scope', '$modalInstance'];