2014-12-08 5 views
1

Я получаю странные ошибки с минификацией, я подозреваю, что это что-то делать с тем фактом, что у меня есть контроллер внутри директивы:Контроллер Angularjs в пределах Директивы Ошибка отказа?

var app = angular.module('myapp'); 

app.directive("person", ['$dialog', function($dialog) { 
return { 
    restrict: "E", 
    templateUrl: "person/views/person.html", 
    replace: true, 
    scope: { 
     myPerson: '=' 
    },  
    controller: mycontroller 
}; 

function mycontroller($scope, $attrs) { 
    $scope.variable = 1; 
} 
}]); 

Что такое правильный способ рефакторинга это так не ломаются во время minifaction?

+4

'angular.module ('m yApp '). controller (' mycontroller ', [' $ scope ',' $ attrs ', mycontroller]); 'Избегайте использования глобальных контроллеров, зарегистрируйте их с помощью функции конструктора контроллера и просто сделайте явную аннотацию зависимостей так же, как то, что вы делаете с директивой. – PSL

+0

Как этот контроллер входит в директиву? Не видя связи с тем, как мой контролер окажется там, как в настоящее время контроллер объявляется внутри приложения. («Человек»). – Rolando

+2

Я пропустил эту часть, как бы там ни было. 'controller: 'mycontroller'' или просто использовать встроенный массив @ значение вашего ключа контроллера ex: -' controller: [' $ scope ',' $ attrs ', mycontroller] '. – PSL

ответ

1

Если вы хотите, чтобы написать это, вы должны использовать $inject

mycontroller.$inject = ['$scope', '$attrs']; 

Ссылка: https://github.com/johnpapa/angularjs-styleguide#style-y075

Но я бы sugest не использовать такого рода «mimimization дружественный» стиль инъекции зависимостей и посмотрите на инструменты автоматизации, которые сделают это для вас - ng-annotate (или его производное от gulp/grunt, которое может использоваться в вашей сборке.)

+0

Является ли ng-аннотатом достаточно умным, чтобы найти случаи, подобные тому, который я написал выше? Один на сайте, как представляется, является базовым app.controller() – Rolando

+0

Да, я забыл про ng-annotate .. @Rolando Однако, если вы действительно хотите протестировать контроллер, вы можете предпочесть их регистрацию с помощью конструктора контроллера. – PSL

+1

Я бы сказал, что он довольно умный. От doc: https://github.com/olov/ng-annotate ng-annotate понимает return return {.., controller: function ($ scope) ..} внутри директивы. , и вы также можете добавить // @ngInject в начало определения функции, он будет прикреплять массив $ inject к функции. –

Смежные вопросы