Saltar al contenido

“Error no detectado: [$injector:unpr]”con angular después del despliegue

Solución:

Si sigue su enlace, le indicará que el error se debe a que $ injector no puede resolver sus dependencias. Este es un problema común con angular cuando el javascript se minimiza / uglified / lo que sea que esté haciendo para la producción.

El problema es cuando tiene, por ejemplo, un controlador;

angular.module("MyApp").controller("MyCtrl", function($scope, $q) {
  // your code
})

La minificación cambia $scope y $q en variables aleatorias que no le dice a angular qué inyectar. La solución es declarar sus dependencias así:

angular.module("MyApp")
  .controller("MyCtrl", ["$scope", "$q", function($scope, $q) {
  // your code
}])

Eso debería arreglar tu problema.

Solo para reiterar, todo lo que he dicho está en el enlace que le proporciona el mensaje de error.

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í:

function MyController($scope, $http) {
    // ...
}

Simplemente agregue una línea después de la declaración que indique qué objetos inyectar cuando se crea una instancia del controlador:

function MyController($scope, $http) {
    // ...
}
MyController.$inject = ['$scope', '$http'];

Esto lo hace seguro para la minificación.

Este problema ocurre cuando el controlador o la directiva no se especifican como una matriz de dependencias y funciones. Por ejemplo

angular.module("appName").directive('directiveName', function () {
    return {
        restrict: 'AE',
        templateUrl: 'calender.html',
        controller: function ($scope) {
            $scope.selectThisOption = function () {
                // some code
            };
        }
    };
});

Cuando se minimiza El ‘$ scope’ que se pasa 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.

angular.module("appName").directive('directiveName', function () {
    return {
        restrict: 'AE',
        templateUrl: 'calender.html'
        controller: ['$scope', function ($scope) { //<-- difference
            $scope.selectThisOption = function () {
                // some code
            };
        }]
    };
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *