AngularJS: проблема минимизации в директиве

У меня есть еще одна проблема с оценкой. На этот раз он из-за службы $scope передал директивному контроллеру. См. Ниже код:

angular.module('person.directives').
directive("person", ['$dialog', function($dialog) {
return {
    restrict: "E",
    templateUrl: "person/views/person.html",
    replace: true,
    scope: {
        myPerson: '='
    },     
    controller: function ($scope)
    {                   
        $scope.test = 3;                   
    }
}
}]);

Если я прокомментирую часть контроллера, то он отлично работает.

Как вы можете видеть, я использовал объявление массива для директивы, поэтому служба $dialog известна как Angular даже после минимизации. Но как я должен это сделать для службы $scope на контроллере?

Ответ 1

Вам нужно объявить контроллер следующим образом:

controller: ['$scope', function ($scope)
    {                   
        $scope.test = 3;                   
    }]

Полный пример:

angular.module('person.directives').
directive("person", ['$dialog', function($dialog) {
return {
    restrict: "E",
    templateUrl: "person/views/person.html",
    replace: true,
    scope: {
        myPerson: '='
    },     
    controller: ['$scope', function ($scope)
    {                   
        $scope.test = 3;                   
    }]
}
}]);

Решение, предоставленное @Sam, будет работать, но это будет означать, что для директивного контроллера для всего приложения не требуется.

Ответ 2

ok, я создал контроллер в отдельном файле:

angular.module('person.controllers').controller('personCtrl', ['$scope', function ($scope) {
$scope.test = 3;
}]);

то в директиве я назначаю контроллер по имени:

controller: 'personCtrl'

Не уверен, что это лучший способ. Он выглядит чистым, хотя. Как вы думаете?