Ich habe eine ziemlich einfache Angular-Anwendung, die auf meinem Entwicklungscomputer einwandfrei ausgeführt wird, aber nach der Bereitstellung mit dieser Fehlermeldung (in der Browserkonsole) fehlschlägt:
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Keine andere Nachricht außer dem. Dies geschieht beim ersten Laden der Seite.
Ich verwende ASP.NET MVC5, Angular 1.2RC3 und pushe über Git auf Azure.
Googeln hat nichts Interessantes ergeben.
Irgendwelche Vorschläge?
BEARBEITEN:
Ich verwende TypeScript und definiere meine Abhängigkeiten mit der $inject
Variablen, z.
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Ich bin der Meinung, dass dies die Probleme beim Umbenennen lokaler Variablen umgehen sollte (oder soll), die während der Minimierung auftreten und diesen Fehler verursachen können.
Das heißt, es hat eindeutig etwas mit dem Minimierungsprozess zu tun, da BundleTable.EnableOptimizations = true
ich es reproduzieren kann , wenn ich es auf meinem Entwicklungscomputer einstelle .
$inject
öffentliche Variable, die meiner Meinung nach der von Ihnen vorgeschlagenen entspricht (siehe docs.angularjs.org/guide/di ). Ich werde meine Frage aktualisieren.BundleTable.EnableOptimizations = true;
das Problem reproduzieren kann , wenn ich ASP.NET MVC-Minifizierungen auf meinem Entwicklungscomputer erzwinge ( ). Weiter schauen.Ich bin selbst auf dasselbe Problem gestoßen, aber meine Controller-Definitionen sahen etwas anders aus als oben. Für Controller, die wie folgt definiert sind:
Fügen Sie nach der Deklaration einfach eine Zeile hinzu, die angibt, welche Objekte beim Instanziieren des Controllers injiziert werden sollen:
Dies macht es minifizierungssicher.
quelle
Dieses Problem tritt auf, wenn der Controller oder die Direktive nicht als Array von Abhängigkeiten und Funktionen angegeben sind. Beispielsweise
Bei Minimierung Der an die Controller-Funktion übergebene '$ scope' wird durch einen Variablennamen mit einem Buchstaben ersetzt. Dies macht die Abhängigkeit ahnungslos. Um dies zu vermeiden, übergeben Sie den Abhängigkeitsnamen zusammen mit der Funktion als Array.
quelle
Wenn Sie Dateien für Angular App \ Resources \ Direktiven und andere Dinge getrennt haben, können Sie die Minimierung Ihres Angular App-Bundles wie folgt deaktivieren (verwenden Sie neues Bundle () anstelle von ScriptBundle () in Ihrer Bundle-Konfigurationsdatei):
Und eckige App würde im Bundle unverändert erscheinen.
quelle
Wenn Sie Dateien für Angular App \ Resources \ Direktiven und andere Dinge getrennt haben, können Sie die Minimierung Ihres Angular App-Bundles wie folgt deaktivieren (verwenden Sie neues Bundle () anstelle von ScriptBundle () in Ihrer Bundle-Konfigurationsdatei):
quelle
Fügen Sie die Dienste $ http, $ scope in die Controller-Funktion ein. Manchmal treten diese Fehler auf, wenn sie fehlen.
quelle
Ich hatte das gleiche Problem, aber das Problem war ein anderes. Ich habe versucht, einen Dienst zu erstellen und $ scope als Parameter an ihn zu übergeben.
Dies ist eine weitere Möglichkeit, diesen Fehler zu erhalten, da in der Dokumentation dieses Links Folgendes angegeben ist:
quelle