28

我有

<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
4

6 回答 6

29

我不确定您的功能用例是什么,但您不能$cookies在配置块中注入服务(是服务)。只有常量和提供者可以注入到配置块中。

您可以将服务注入运行块,但我不知道这是否对您有帮助,因为我不确定您想用这些 cookie 做什么。

顺便说一句:您似乎正在混合主角度文件和ngCookies模块的版本。这与您的问题没有直接关系,但这很奇怪。

于 2013-03-12T11:18:12.007 回答
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模块提供的服务是命名的$cookies

这个解决方案有点破解,因为您手动创建新的注入器,与您的 Angular 应用程序自动创建和使用的注入器分开,但它应该是安全的,因为ngCookie似乎只使用不保留自己的 Angular 功能state 并且只是浏览器功能的薄包装。

于 2014-11-27T10:10:37.827 回答
2

我遇到了同样的问题。角度版本和角度 cookie 版本不匹配。我所做的修复它是将 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。

它奏效了。

于 2015-06-09T14:17:22.363 回答
0

https://stackoverflow.com/a/18971123/132374看来,如果您还没有在服务模块中删除“ngCookies”,您似乎需要:

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

这对我有用。请记住,$cookies这只适用于 Angular 允许您注入服务的情况(有关详细信息,请参阅接受的答案)。

于 2015-04-02T04:07:39.253 回答
0

就像其他人所说的那样,您不能使用 angular cookie 服务。然而,人类已知的法律没有规定您不能简单地使用 document.cookie 来访问它并自己解析它。或者,您可以创建自己的提供程序,让您可以访问 cookie,然后您可以注入它。请记住,angular 只是一个框架,当框架有限制时,您必须记住使用称为 javascript 的东西。

于 2016-09-23T20:05:51.353 回答
-11

$cookieProvider您应该使用名称注入$cookies

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

        }
    ]);
于 2013-12-06T03:56:14.130 回答