我有
<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>
一切都正确加载。
然后在我的javascript中尝试注入ngCookies:
angular.module("myApp", ["ngCookies"]).
config(function($cookies) {
console.log($cookies.myCookie);
});
但它似乎找不到$ cookies:
Unknown provider: $cookies from myApp
答案 0 :(得分:28)
我不确定你的功能用例是什么,但是你不能在配置块中注入服务($cookies
是服务)。只能在配置块中注入常量和提供者。
您可以将服务注入运行块但我不知道这是否对您有所帮助,因为我不确定您尝试使用这些cookie做什么。
BTW:您似乎混合了主角度文件和ngCookies
模块的版本。这与你的问题没有直接关系,但这很奇怪。
答案 1 :(得分:11)
您可以手动注射:
myApp.config(function() {
var $cookies;
angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
$cookies = _$cookies_;
}]);
// here you can use $cookies as usual
});
您可能想知道为什么我们必须将ngCookies
injector()
指定为.invoke()
来电?
ngCookies
是模块的名称(您的项目中需要angular-cookies.js才能使用此模块)。通过调用injector()
创建注入器时,您可以指定应使用哪些模块,以便可以使用这些模块中的服务。
invoke()
调用一个函数,但是让你指定应该将哪些服务(由各种模块提供)传递给函数(在我们的例子中,由ngCookies
模块提供的服务命名为{{ 1}})
这个解决方案有点像黑客,因为你手动创建新的注入器,与你的角度应用程序自动创建和使用的注入器分开,但它应该是安全的,因为$cookies
似乎只使用的功能不保持自己状态的角度,只是浏览器功能的薄包装。
答案 2 :(得分:2)
我遇到了同样的问题。 角度版本和角度曲奇版本没有匹配。 我做了什么修复它是将bower.json更新为两者的工作版本。
"angular": ">=1.2.*",
"angular-cookies": ">=1.2.*"
然后我跑了:
bower install
我有这个问题:
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
然后我选择了3。
并且有效。
答案 3 :(得分:0)
从https://stackoverflow.com/a/18971123/132374开始,您似乎需要在服务模块中删除'ngCookies',如果您还没有:
var serviceModule = angular.app('App.services', ['ngCookies']);
这对我有用。请记住,$cookies
仅适用于Angular允许您注入服务的地方(有关详细信息,请参阅接受的答案)。
答案 4 :(得分:0)
与其他人一样,您不能使用角度cookie服务。但是,没有人知道法律说你不能简单地使用document.cookie来访问它并自己解析它。或者,您可以创建自己的提供程序,使您可以访问cookie,并可以注入。请记住,angular只是一个框架,当框架有限制时,你必须记住使用一个叫做javascript的东西。
答案 5 :(得分:-11)
您应该使用名称$cookieProvider
注入$cookies
:
angular.module("MyApp", ["ngCookies","ngRoute"])
.config(["$routeProvider", "$locationProvider","$cookiesProvider",
function($routeProvider, $locationProvider, $cookies) {
}
]);