servicios propiedades pasar parametros hacer funciones entre diferencia componente como javascript angularjs angular-cookies

javascript - propiedades - ¿Por qué no puedo inyectar galletas angulares?



servicios en angular 1 (6)

yo tengo

<body ng-app="myApp"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js"> </script> </body>

Todo se carga correctamente.

Entonces en mi javascript intento inyectar ngCookies:

angular.module("myApp", ["ngCookies"]). config(function($cookies) { console.log($cookies.myCookie); });

Pero no parece encontrar $ cookies:

Unknown provider: $cookies from myApp


Como todos los demás indicaron, no puede utilizar el servicio de cookies angulares. Sin embargo, no hay ninguna ley conocida por el hombre que diga que no puede simplemente usar document.cookie para acceder a él y analizarlo usted mismo. Alternativamente, puede crear su propio proveedor que le dé acceso a las cookies y puede inyectar eso. Recuerde que angular es simplemente un marco y cuando el marco tiene limitaciones, debe recordar usar algo llamado javascript.


Debe inyectar con el nombre $cookieProvider lugar de $cookies :

angular.module("MyApp", ["ngCookies","ngRoute"]) .config(["$routeProvider", "$locationProvider","$cookiesProvider", function($routeProvider, $locationProvider, $cookies) { } ]);


Desde https://.com/a/18971123/132374 , parece que necesita declarar ''ngCookies'' en su módulo de servicio si aún no lo ha hecho:

var serviceModule = angular.app(''App.services'', [''ngCookies'']);

Eso funcionó para mí. Tenga en cuenta que $cookies solo funcionan cuando Angular le permite inyectar servicios (consulte la respuesta aceptada para obtener más detalles).


Me encontré con el mismo problema. La versión angular y la versión angular de cookies no coinciden. Lo que hice para solucionarlo es actualizar bower.json a una versión funcional de ambos.

"angular": ">=1.2.*", "angular-cookies": ">=1.2.*"

Entonces corrí:

bower install

Tengo esta pregunta:

Unable to find a suitable version for angular, please choose one: 1) angular#1.3.13 which resolved to 1.3.13 and is required by angular-cookies#1.3.13 2) angular#>=1.2.x <=1.4.x which resolved to 1.3.16 and is required by oclazyload#1.0.1 3) angular#1.4.0 which resolved to 1.4.0 and is required by angular-cookies#1.4.0 4) angular#>=1.2.* which resolved to 1.4.0 and is required by hashve 5) angular#>=1 which resolved to 1.4.0 and is required by angular-bootstrap#0.11.2 6) angular#>=1.2.26 <=1.5 which resolved to 1.4.0 and is required by angular-translate#2.7.2 7) angular#~1.x which resolved to 1.4.0 and is required by restangular#1.5.1 8) angular#^1.2.6 which resolved to 1.4.0 and is required by angular-socket-io#0.6.1 9) angular#>= 1.0.8 which resolved to 1.4.0 and is required by angular-ui-router#0.2.15 10) angular#>=1.2.0 <1.5.0 which resolved to 1.4.0 and is required by angular-moment#0.10.1Prefix the choice with ! to persist it to bower.json

Entonces elegí 3.

Y funcionó.


No estoy seguro de cuál es su caso de uso funcional, pero no puede inyectar servicios ( $cookies es un servicio) dentro de los bloques de configuración. Solo se pueden inyectar constantes y proveedores dentro de los bloques de configuración.

Puede inyectar servicios en bloques de ejecución, pero no sé si esto le ayuda, ya que no estoy seguro de qué intenta hacer con esas cookies.

Por cierto: parece que estás mezclando versiones del archivo angular principal y el módulo ngCookies . Esto no está directamente vinculado a su problema, pero es bastante extraño.


Puedes inyectarlo manualmente:

myApp.config(function() { var $cookies; angular.injector([''ngCookies'']).invoke([''$cookies'', function(_$cookies_) { $cookies = _$cookies_; }]); // here you can use $cookies as usual });

Podría preguntarse por qué tenemos que especificar ngCookies en la llamada del injector() tan bien como en la llamada .invoke() ?

ngCookies es el nombre del módulo (necesitará tener angular-cookies.js en su proyecto para poder usar este módulo). Cuando crea un inyector llamando al injector() , especifica qué módulos deben usarse para que se puedan usar los servicios de esos módulos.

invoke() llama a una función pero le permite especificar qué servicios (proporcionados por varios módulos) deben transferirse a la función (en nuestro caso, el servicio proporcionado por ngCookies se llama $cookies )

Esta solución es un poco difícil porque está creando manualmente un nuevo inyector separado del que su aplicación angular crea y usa automáticamente, pero debería ser seguro porque ngCookie parece estar usando solo funcionalidades de angular que no mantienen su ngCookie Estado propio y son sólo envolturas delgadas de la funcionalidad del navegador.