如何访问AngularJS中的cookie?

Ell*_*ead 235 angularjs angular-cookies

AngularJS访问cookie的方式是什么?我已经看到了对cookie的服务和模块的引用,但没有示例.

是否存在或者没有AngularJS规范方法?

Dan*_*yon 198

此答案已更新,以反映最新的稳定angularjs版本.一个重要的注意事项是$cookieStore周围的薄包装$cookies.它们几乎相同,因为它们只与会话cookie一起使用.虽然,这回答了原始问题,但您可能还需要考虑其他解决方案,例如使用localstorage或jquery.cookie插件(这将为您提供更细粒度的控制并执行服务器端cookie.当然,在angularjs中这样做意味着您可能希望将它们包装在服务中并用于$scope.apply通知角度模型的更改(在某些情况下).

另外一个注意事项是,在将数据拉出时两者之间存在细微差别,具体取决于您是否曾经$cookie存储过值或$cookieStore.当然,你真的想要使用其中一个.

除了添加对js文件的引用之外,还需要注入ngCookies应用程序定义,例如:

angular.module('myApp', ['ngCookies']);
Run Code Online (Sandbox Code Playgroud)

你应该好好去.

这是一个功能最小的示例,其中我展示了cookieStore一个围绕cookie的薄包装:

<!DOCTYPE html>
<html ng-app="myApp">
<head>
   <link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
</head>
<body ng-controller="MyController">

  <h3>Cookies</h3>
  <pre>{{usingCookies|json}}</pre>
  <h3>Cookie Store</h3>
  <pre>{{usingCookieStore|json}}</pre>

  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-cookies.js"></script>
  <script>
    angular.module('myApp', ['ngCookies']);
    app.controller('MyController',['$scope','$cookies','$cookieStore', 
                       function($scope,$cookies,$cookieStore) {
      var someSessionObj = { 'innerObj' : 'somesessioncookievalue'};

    $cookies.dotobject = someSessionObj;
    $scope.usingCookies = { 'cookies.dotobject' : $cookies.dotobject, "cookieStore.get" : $cookieStore.get('dotobject') };

    $cookieStore.put('obj', someSessionObj);
    $scope.usingCookieStore = { "cookieStore.get" : $cookieStore.get('obj'), 'cookies.dotobject' : $cookies.obj, };
    }
  </script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

步骤是:

  1. 包括 angular.js
  2. 包括 angular-cookies.js
  3. 注入ngCookies你的app模块(并确保你在ng-app属性中引用该模块)
  4. 将一个$cookies$cookieStore参数添加到控制器
  5. 使用点(.)运算符访问cookie作为成员变量 - 或者 -
  6. cookieStore使用put/get方法访问

  • 使用$ cookies,[$ cookieStore现已弃用](https://docs.angularjs.org/api/ngCookies/service/$cookieStore) (17认同)
  • 这个答案不再有效,你需要使用$ cookieStore,如另一个答案所述. (4认同)
  • 谢谢,我编辑了我的问题展示了一个完整的工作示例. (2认同)

Uri*_*Uri 70

这是您设置和获取cookie值的方法.当我发现这个问题时,这就是我最初寻找的东西.

注意我们使用$cookieStore而不是$cookies

<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <script src="http://code.angularjs.org/1.0.0rc10/angular-1.0.0rc10.js"></script>
  <script src="http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js"></script>
  <script>
    angular.module('myApp', ['ngCookies']);
    function CookieCtrl($scope, $cookieStore) {
      $scope.lastVal = $cookieStore.get('tab');

      $scope.changeTab = function(tabName){
          $scope.lastVal = tabName;
          $cookieStore.put('tab', tabName);
      };
    }
  </script>
</head>
<body ng-controller="CookieCtrl">
    <!-- ... -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


Mak*_*ood 44

Angular 在1.4.x版中已弃用 $cookieStore,因此$cookies如果您使用的是最新版本的angular,请使用.语法对于$cookieStore&保持相同$cookies:

$cookies.put("key", "value"); 
var value = $cookies.get("key");
Run Code Online (Sandbox Code Playgroud)

有关API概述,请参阅文档.还要注意,cookie服务已经增强了一些新的重要功能,如设置过期(请参阅此答案)和域(请参阅CookiesProvider文档).

请注意,在1.3.x或更低版本中,$ cookies的语法与上述语法不同:

$cookies.key = "value";
var value = $cookies.value; 
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用的是凉亭,请确保正确输入您的包裹名称:

bower install angular-cookies@X.Y.Z 
Run Code Online (Sandbox Code Playgroud)

其中XYZ是您正在运行的AngularJS版本.凉亭里的另一个套餐"angular-cookie"(没有's')不是官方的角度套餐.


Ken*_*ple 12

仅供参考,我使用$cookieStore两个控制器a $rootScope和AngularjS 1.0.6组合了一个JSFiddle.它在JSFifddle上作为http://jsfiddle.net/krimple/9dSb2/作为基础,如果你搞乱这个...

它的要点是:

使用Javascript

var myApp = angular.module('myApp', ['ngCookies']);

myApp.controller('CookieCtrl', function ($scope, $rootScope, $cookieStore) {
    $scope.bump = function () {
        var lastVal = $cookieStore.get('lastValue');
        if (!lastVal) {
            $rootScope.lastVal = 1;
        } else {
            $rootScope.lastVal = lastVal + 1;
        }
        $cookieStore.put('lastValue', $rootScope.lastVal);
    }
});

myApp.controller('ShowerCtrl', function () {
});
Run Code Online (Sandbox Code Playgroud)

HTML

<div ng-app="myApp">
    <div id="lastVal" ng-controller="ShowerCtrl">{{ lastVal }}</div>
    <div id="button-holder" ng-controller="CookieCtrl">
        <button ng-click="bump()">Bump!</button>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)


And*_*lin 10

http://docs.angularjs.org/api/ngCookies.$cookieStore

请确保包含http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js以使用它.

  • 网址已经过时 - 现在,angular-cookies-在Googles CDN上托管,网址为:https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js( `的https:// ajax.googleapis.com/AJAX /库/ angularjs/1.0.1 /角cookies.min.js`)查看博客文章:http://blog.angularjs.org/2012/07/angularjs-现在主办,上谷歌,cdn.html (7认同)
  • 事实证明,`$ cookieStore`显然主要用于客户端生成的cookie.要访问服务器生成的cookie,我不得不使用`$ cookies`. (3认同)
  • 您能提供一些关于如何访问它的提示,或者我需要解决这些文档的链接吗?在我的HTML中包含angular-cookies.js文件之后,我将`$ cookieStore`添加到我的控制器的签名(即`函数AccountCtrl($ scope,$ cookieStore)`),但是然后得到以下错误消息:未知的提供者:$ cookieStoreProvider < - $ cookieStore (2认同)