J'ai une application Angular assez simple qui fonctionne très bien sur ma machine de développement, mais qui échoue avec ce message d'erreur (dans la console du navigateur) après son déploiement:
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Aucun autre message à part ça. Cela se produit lorsque la page se charge pour la première fois.
J'exécute ASP.NET MVC5, Angular 1.2RC3 et je pousse vers Azure via git.
Google n'a rien trouvé d'intéressant.
Aucune suggestion?
ÉDITER:
J'utilise TypeScript et je définis mes dépendances avec la $inject
variable, par exemple:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Je crois que cela devrait (ou vise à) contourner les problèmes de changement de nom de variable locale qui surviennent lors de la minification et qui peuvent provoquer cette erreur.
Cela dit, cela a clairement quelque chose à voir avec le processus de minification, car lorsque je le configure BundleTable.EnableOptimizations = true
sur ma machine de développement, je peux le reproduire.
$inject
variable publique, ce qui, je pense, équivaut à la façon dont vous suggérez (voir docs.angularjs.org/guide/di ). Je vais mettre à jour ma question.BundleTable.EnableOptimizations = true;
), je peux reproduire le problème. Continuer à regarder.J'ai moi-même rencontré le même problème, mais mes définitions de contrôleur étaient un peu différentes de celles ci-dessus. Pour les contrôleurs définis comme ceci:
Ajoutez simplement une ligne après la déclaration indiquant les objets à injecter lorsque le contrôleur est instancié:
Cela le rend sûr pour la minification.
la source
Ce problème se produit lorsque le contrôleur ou la directive ne sont pas spécifiés en tant que tableau de dépendances et de fonction. Par exemple
Une fois minifié Le '$ scope' passé à la fonction de contrôleur est remplacé par un nom de variable à une seule lettre. Cela rendra angulaire ignorant de la dépendance. Pour éviter cela, transmettez le nom de la dépendance avec la fonction sous forme de tableau.
la source
Si vous avez des fichiers séparés pour l'application angulaire \ resources \ directives et d'autres choses, vous pouvez simplement désactiver la minification de votre bundle d'applications angulaire comme ceci (utilisez new Bundle () au lieu de ScriptBundle () dans votre fichier de configuration de bundle):
Et l'application angulaire apparaîtrait dans le paquet non modifiée.
la source
Si vous avez des fichiers séparés pour l'application angulaire \ resources \ directives et d'autres choses, vous pouvez simplement désactiver la minification de votre bundle d'applications angulaire comme ceci (utilisez new Bundle () au lieu de ScriptBundle () dans votre fichier de configuration de bundle):
la source
Ajoutez les services $ http, $ scope dans la fonction du contrôleur, parfois s'ils manquent, ces erreurs se produisent.
la source
J'ai eu le même problème mais le problème était différent, j'essayais de créer un service et de lui passer $ scope en tant que paramètre.
C'est une autre façon d'obtenir cette erreur comme le dit la documentation de ce lien:
la source