7

Если у меня есть следующие:Угловая минификация с контроллером?

myapp.directive('directivename', ... 

    return { 
     ... 
     restrict: 'E', 
     controller: MyController, 
     ... 
    } 

    function MyController($scope, $somethingelse) { 
     // Contents of controller here 
    } 
); 

Как изменить это такое, что MyController не будут уничтожены, когда уменьшенная? Я получаю следующее сообщение об ошибке:

Error: [$injector:unpr] Unknown provider: eProvider <- e

ответ

20

Это может быть разрешено с помощью явной аннотации зависимостей. У вас есть скрытая аннотация, которая вызывает проблемы при минимизации. Вы можете использовать $inject или встроенную аннотацию массива для аннотации зависимостей в директиве.

MyController.$inject = ['$scope', '$somethingelse']; 

function MyController($scope, $somethingelse) { 
    // Contents of controller here 
} 

Или в директиве:

return { 
    ... 
    restrict: 'E', 
    controller: ['$scope', '$somethingelse', MyController], 
    ... 
} 

или зарегистрировать свой контроллер, используя .controller синтаксис

app.controller('MyController', ['$scope', '$somethingelse', MyController]); 

и настроить имя контроллера в директиве вместо конструктора.

return { 
    ... 
    restrict: 'E', 
    controller: 'MyController', 
    ... 
} 

Вы также можете посмотреть на ng-annotate, с которым вы не должны использовать явную аннотацию.

+0

Вы знаете ... если бы только Угловой дал нам больше возможностей. Почему они настолько негибкие? Dang. – Rap

1

Обычно используется следующий подход:

myapp.controller('MyController', ['$scope', '$somethingelse', function($scope, $somethingelse) { 
    ... 
}]); 

, чтобы избежать таких проблем.

+0

Могу ли я сделать это изнутри моей директивы? Обратите внимание, что MyController - это тот, который специфичен для директивы, поэтому я помещаю его в myapp.directive(). Я знаю, что это «обычный» – Rolando

+0

Я полагаю, что 'var MyController = function ($ scope, $ somethingelse) {...}' 'MyController. $ Injection = ['$ scope', '$ somethingelse']; 'должен работать. Изменить: это похоже на ответ PSL. –

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