AngularJS访问cookie的方式是什么?我已经看到过针对Cookie的服务和模块的引用,但没有示例。
有没有,或者没有AngularJS规范方法?
AngularJS访问cookie的方式是什么?我已经看到过针对Cookie的服务和模块的引用,但没有示例。
有没有,或者没有AngularJS规范方法?
Answers:
该答案已更新,以反映最新的稳定angularjs版本。一个重要的注意事项是$cookieStore
周围有薄薄的包装纸$cookies
。它们几乎相同,因为它们仅与会话cookie一起使用。虽然,这回答了原始问题,但是您可能还需要考虑其他解决方案,例如使用localstorage或jquery.cookie插件(这将为您提供更细粒度的控制并执行服务器端cookie。当然,在angularjs中这样做意味着您可能希望将它们包装在服务中并用于$scope.apply
通知角度模型更改(在某些情况下)。
还有一点需要注意的是,在拉出数据时,两者之间会有细微的差别,具体取决于您是用来$cookie
存储值还是$cookieStore
。当然,您真的想使用其中一个。
除了添加对js文件的引用之外,您还需要注入ngCookies
应用程序定义中,例如:
angular.module('myApp', ['ngCookies']);
那么您应该会很好。
这是一个功能最小的示例,在这里我展示了它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>
这些步骤是:
angular.js
angular-cookies.js
ngCookies
您的应用程序模块(并确保您在ng-app
属性中引用该模块)$cookies
或$cookieStore
参数cookieStore
使用put / get方法访问这是设置和获取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>
Angular 在1.4.x版本中已弃用 $cookieStore
,因此,$cookies
如果您使用的是最新版本的angular ,请改为使用。$cookieStore
&的语法保持不变$cookies
:
$cookies.put("key", "value");
var value = $cookies.get("key");
有关API概述,请参见文档。还请注意,cookie服务已通过一些新的重要功能得到了增强,例如设置过期时间(请参阅此答案)和域(请参见CookiesProviderDocs)。
请注意,在1.3.x或更低版本中,$ cookies与上面的语法不同:
$cookies.key = "value";
var value = $cookies.value;
另外,如果您使用的是凉亭,请确保正确输入软件包名称:
bower install angular-cookies@X.Y.Z
其中XYZ是您正在运行的AngularJS版本。凉亭“ angular-cookie”中还有另一个软件包(不带“ s”),它不是官方的角度软件包。
仅供参考,我使用$cookieStore
,两个控制器a $rootScope
和AngularjS 1.0.6 对此进行了JSFiddle组合。它在JSFifddle上为http://jsfiddle.net/krimple/9dSb2/如果您正在使用作为基础...
其要点是:
Java脚本
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 () {
});
的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>
http://docs.angularjs.org/api/ngCookies.$cookieStore
确保包含http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js才能使用它。
$cookieStore
了控制器的签名(即function AccountCtrl($scope, $cookieStore)
),但随后收到以下错误消息:未知提供程序:$ cookieStoreProvider <-$ cookieStore
$cookieStore
显然主要用于客户端生成的cookie。要访问服务器生成的cookie,我不得不使用它$cookies
。
https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js
)请参阅博客文章: blog.angularjs.org /
AngularJS提供ngCookies模块和$ cookieStore服务以使用浏览器Cookies。
我们需要添加angular-cookies.min.js文件以使用cookie功能。
这是AngularJS Cookie的一些方法。
get(key); //此方法返回给定cookie键的值。
getObject(key); //此方法返回给定cookie键的反序列化值。
得到所有(); //此方法返回包含所有cookie的键值对象。
put(键,值,[选项]); //此方法为给定的cookie键设置一个值。
remove(key,[options]); //此方法删除给定的cookie。
例
HTML
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.1/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.1/angular-cookies.min.js"></script>
</head>
<body ng-controller="MyController">
{{cookiesUserName}} loves {{cookietechnology}}.
</body>
</html>
的JavaScript
var myApp = angular.module('myApp', ['ngCookies']);
myApp.controller('MyController', ['$scope', '$cookies', '$cookieStore', '$window', function($scope, $cookies, $cookieStore, $window) {
$cookies.userName = 'Max Joe';
$scope.cookiesUserName = $cookies.userName;
$cookieStore.put('technology', 'Web');
$scope.cookietechnology = $cookieStore.get('technology'); }]);
我已经从http://www.tutsway.com/simple-example-of-cookie-in-angular-js.php中获取了参考。
添加角度cookie库:angular-cookies.js
您可以对相应的控制器使用$ cookies或$ cookieStore参数
主控制器添加此注入'ngCookies':
angular.module("myApp", ['ngCookies']);
以这种方式在控制器中使用Cookies:
app.controller('checkoutCtrl', function ($scope, $rootScope, $http, $state, $cookies) {
//store cookies
$cookies.putObject('final_total_price', $rootScope.fn_pro_per);
//Get cookies
$cookies.getObject('final_total_price'); }
最初接受的答案提到jquery.cookie插件。但是,几个月前,它已重命名为js-cookie并删除了jQuery依赖项。原因之一只是为了使其易于与Angular等其他框架集成。
现在,如果您想将js-cookie与angular 集成在一起,就像下面这样简单:
module.factory( "cookies", function() {
return Cookies.noConflict();
});
就是这样。没有jQuery。没有ngCookies。
您还可以创建自定义实例来处理以不同方式编写的特定服务器端Cookie。以PHP为例,它将服务器端的空格转换为加号,
+
而不是对其进行百分比编码:
module.factory( "phpCookies", function() {
return Cookies
.noConflict()
.withConverter(function( value, name ) {
return value
// Decode all characters according to the "encodeURIComponent" spec
.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent)
// Decode the plus sign to spaces
.replace(/\+/g, ' ')
});
});
自定义提供程序的用法如下所示:
module.service( "customDataStore", [ "phpCookies", function( phpCookies ) {
this.storeData = function( data ) {
phpCookies.set( "data", data );
};
this.containsStoredData = function() {
return phpCookies.get( "data" );
}
}]);
我希望这对任何人都有帮助。
请参阅本期的详细信息: https //github.com/js-cookie/js-cookie/issues/103
有关如何与服务器端集成的详细文档,请参见此处:https : //github.com/js-cookie/js-cookie/blob/master/SERVER_SIDE.md
这是一个使用$ cookies的简单示例。单击按钮后,将保存cookie,然后在重新加载页面后将其还原。
app.html:
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular-cookies.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="appController as vm">
<input type="text" ng-model="vm.food" placeholder="Enter food" />
<p>My favorite food is {{vm.food}}.</p>
<p>Open new window, then press Back button.</p>
<button ng-click="vm.openUrl()">Open</button>
</body>
</html>
app.js:
(function () {
"use strict";
angular.module('app', ['ngCookies'])
.controller('appController', ['$cookies', '$window', function ($cookies, $window) {
var vm = this;
//get cookie
vm.food = $cookies.get('myFavorite');
vm.openUrl = function () {
//save cookie
$cookies.put('myFavorite', vm.food);
$window.open("http://www.google.com", "_self");
};
}]);
})();