Tengo una aplicación Angular bastante simple que se ejecuta bien en mi máquina de desarrollo, pero falla con este mensaje de error (en la consola del navegador) después de implementarlo:
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Ningún otro mensaje además de ese. Sucede cuando se carga la página por primera vez.
Estoy ejecutando ASP.NET MVC5, Angular 1.2RC3 y presionando a Azure a través de git.
Buscar en Google no ha encontrado nada interesante.
¿Alguna sugerencia?
EDITAR:
Estoy usando TypeScript y definiendo mis dependencias con la $inject
variable, por ejemplo:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Creo que debería (o tiene la intención de) solucionar los problemas de cambio de nombre de las variables locales que surgen durante la minificación y que pueden causar este error.
Dicho esto, claramente tiene algo que ver con el proceso de minificación, ya que cuando lo configuro BundleTable.EnableOptimizations = true
en mi máquina de desarrollo, puedo reproducirlo.
$inject
variable pública, que creo que es equivalente a la forma en que sugieres (consulta docs.angularjs.org/guide/di ). Actualizaré mi pregunta.BundleTable.EnableOptimizations = true;
), puedo reproducir el problema. Continuando mirando.Me encontré con el mismo problema, pero las definiciones de mi controlador se veían un poco diferentes a las anteriores. Para controladores definidos así:
Simplemente agregue una línea después de la declaración que indique qué objetos inyectar cuando se crea una instancia del controlador:
Esto lo hace seguro para la minificación.
fuente
Este problema ocurre cuando el controlador o la directiva no se especifican como una matriz de dependencias y funciones. Por ejemplo
Cuando se minimiza El '$ scope' pasado a la función del controlador se reemplaza por un nombre de variable de una sola letra. Esto hará que angular no tenga ni idea de la dependencia. Para evitar esto, pase el nombre de la dependencia junto con la función como una matriz.
fuente
Si ha separado archivos para aplicaciones angulares \ recursos \ directivas y otras cosas, entonces puede deshabilitar la minificación de su paquete de aplicaciones angulares de esta manera (use el nuevo Bundle () en lugar de ScriptBundle () en el archivo de configuración de su paquete):
Y la aplicación angular aparecería en un paquete sin modificaciones.
fuente
Si ha separado archivos para aplicaciones angulares \ recursos \ directivas y otras cosas, entonces puede deshabilitar la minificación de su paquete de aplicaciones angulares de esta manera (use el nuevo Bundle () en lugar de ScriptBundle () en el archivo de configuración de su paquete):
fuente
Agregue los servicios $ http, $ scope en la función del controlador; a veces, si faltan, se producen estos errores.
fuente
Tuve el mismo problema, pero el problema era diferente, estaba tratando de crear un servicio y pasarle $ scope como parámetro.
Esa es otra forma de obtener este error como dice la documentación de ese enlace:
fuente