2016-03-20 13 views
0

Dieser Code funktioniert, aber nicht wenn minimiert ... Was soll ich tun? ich diesen Fehler Fehler:angular injection wenn minify

$ Injektor: strictdi Explicit Anmerkung

erforderlich // app.js

angular 
.module('app', [route, 'templates']); 

angular 
.module('app') 
.config(config); 

function config($routeProvider, $locationProvider) { 
$routeProvider 

.when('/', { 
    templateUrl: 'home.html', 
    controller: 'HomeController', 
    controllerAs: 'vm' 
}); 

$locationProvider.html5Mode(true); 
} 


angular 
.module('app') 
.controller('HomeController', HomeController); 

function HomeController() { 
var vm = this; 
vm.header = 'Home'; 
} 

// home.html

{{ vm.header }} 
+0

Dies ist ein altes Problem: https://scotch.io/tutorials/ declaring-angularjs-modules-for-minification –

Antwort

2

Angular versucht zu impliziten Lasten Abhängigkeiten von den Argumenten Namen und es funktioniert gut, solange das Argument Name ist der gleiche als die Abhängigkeit, die Sie laden möchten.

Zum Beispiel

function config($routeProvider, $locationProvider) { 
    ... 
} 

Diese Winkel lösen die Funktion mit dem $ routeProvider und die $ locationProvider zu injizieren, aber was passiert, wenn Sie den Code dieses minify:

function config(a, b) { 
    ... 
} 

Angular Wille Jetzt versuche die Funktion mit a und b zu injizieren (was nicht existiert). Daher müssen Sie explizit angeben, welche Abhängigkeiten Sie injizieren möchten. Sie können entweder tun es mit Inline-Klammer-Notation:

// bracket notation 
angular 
    .module('app') 
    .config(['$routeProvider', '$locationProvider', config]); 

function config($routeProvider, $locationProvider) { 
    ... 
} 

... oder alternativ mit dem $ injizieren Eigenschaft:

// $inject property 
angular 
    .module('app') 
    .config(config); 

config.$inject = ['$routeProvider', '$locationProvider']; 
function config($routeProvider, $locationProvider) { 
    ... 
} 
+0

Große Antwort! Wenn Sie bereits einen Build-Prozess haben und nicht alles selbst eingeben wollen, sollten Sie sich ng-annotieren, das diese zusätzlichen Informationen vor der Verkleinerung einfügen kann. https://github.com/olov/ng-annotate. Der Fehler kann auch dann erzwungen werden, wenn er nicht durch Hinzufügen des strict-di-Attributs der ng-app minimiert wird. Dies hilft, Fehler bereits während der Entwicklung zu erkennen und scheint im OP aktiviert zu sein. Siehe hier: https://docs.angularjs.org/api/ng/directive/ngApp –

0

Da Sie‘ Um den strikten Modus zu verwenden (höchstwahrscheinlich "verwenden Sie strikt" irgendwo im Code), müssen Sie explizit die Abhängigkeiten einbringen.

Sie können tun, wie diese

config.$inject = [$routeProvider, $locationProvider]; 
+0

Die Nachricht tritt nicht aufgrund einer "use strict" -Direktive auf, sondern wird durch die Verwendung der ngStrictDi-Prüfungen (strict dependency injection) verursacht, die durch Hinzufügen des entsprechenden Attributs aktiviert werden können: https: //docs.angularjs.org/api/ng/directive/ngApp –

0

können Sie versuchen, diese

angular 
.module('app') 
    .config(config); 

    config.$inject = ['$routeProvider','$locationProvider']; 
    function config($routeProvider, $locationProvider) { 
$routeProvider 

.when('/', { 
    templateUrl: 'home.html', 
    controller: 'HomeController', 
    controllerAs: 'vm' 
    }); 

    $locationProvider.html5Mode(true); 
} 

})(); 

    (function() { 
    'use strict'; 

     angular 
     .module('plunker') 
     .controller('HomeController',HomeController); 


     HomeController.$inject = []; 
     function HomeController() { 

     var vm = this; 
      } 

     })(); 
Verwandte Themen