7

Se ho il seguente:Min. Angolare con controller di controllo?

myapp.directive('directivename', ... 

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

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

Come faccio a modificare questo in modo tale che MyController non andranno distrutte quando minified? Sto ottenendo il seguente errore:

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

risposta

20

Può essere risolto utilizzando l'annotazione di dipendenza esplicita. Quello che hai annotazione implicita che causa problemi mentre si minimizza. È possibile utilizzare $inject o l'annotazione dell'array in linea per annotare anche le dipendenze nella direttiva.

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

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

O nella direttiva:

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

o registri il controllore utilizzando la sintassi .controller

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

e impostare nome del controller nella direttiva al posto del costruttore.

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

Si può anche dare un'occhiata a ng-annotate con il quale non è necessario utilizzare l'annotazione esplicita.

+0

Sai ... se solo Angular ci ha dato più opzioni. Perché sono così inflessibili? Dang. – Rap

1

Di solito, viene utilizzato il seguente approccio:

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

per evitare tali problemi.

+0

Posso farlo dall'interno della mia direttiva? Si noti che MyController è uno specifico per la direttiva, quindi l'ho inserito all'interno di myapp.directive(). So che è ciò che è "normale" – Rolando

+0

Suppongo che 'var MyController = function ($ scope, $ somethingelse) {...}' 'MyController. $ Inject = ['$ scope', '$ somethingelse']; 'dovrebbe funzionare. Modifica: è simile alla risposta di PSL. –