9 ответов:
этот ответ был обновлен, чтобы отразить последнюю стабильную версию angularjs. Одно важное замечание заключается в том, что
$cookieStore- это тонкая обертка вокруг$cookies. Они очень похожи в том, что они работают только с сеансовыми. Хотя это отвечает на исходный вопрос, есть и другие решения, которые вы можете рассмотреть, например, с помощью localstorage или jquery.плагин cookie (который даст вам более мелкозернистый контроль и сделает файлы cookie на стороне сервера. Конечно, делать это в angularjs означает вы, вероятно, хотели бы обернуть их в сервис и использовать$scope.applyдля уведомления угловых об изменениях в моделях (в некоторых случаях).еще одна заметка, и это то, что есть небольшая разница между ними при извлечении данных в зависимости от того, если вы использовали
$cookieсохранить значения или$cookieStore. Конечно, вы действительно хотите использовать один или другой.в дополнение к добавлению ссылки на файл js вам нужно ввести
ngCookiesв определение вашего приложения, такие как:angular.module('myApp', ['ngCookies']);затем вы должны быть хорошо идти.
вот функциональный минимальный пример, где я показываю, что
cookieStore- это тонкая обертка вокруг печенья:<!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- inject
ngCookiesв ваш модуль приложения (и убедитесь, что вы ссылаетесь на этот модуль в )- добавить
$cookiesили
вот как вы можете установить и получить значения 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>
Угловое устаревший
$cookieStoreв версии 1.4.x, так что используйте$cookiesвместо этого, если вы используете последнюю версию угловой. Синтаксис остается прежним для$cookieStore&$cookies:$cookies.put("key", "value"); var value = $cookies.get("key");посмотреть Docs для обзора API. Помните также, что служба cookie была улучшена с некоторыми новыми важными функциями, такими как установка срока действия (см. ответ) и домен (см. CookiesProvider Docs).
обратите внимание, что, в версии 1.3.x или ниже, $cookies имеет другой синтаксис, чем выше:
$cookies.key = "value"; var value = $cookies.value;кроме того, если вы используете bower, убедитесь, что правильно введите имя пакета:
bower install [email protected]где X. Y. Z-это версия AngularJS, которую вы используете. Есть еще один пакет в bower "angular-cookie" (без "s"), который не является официальным угловым пакетом.
к вашему сведению, я собрал JSFiddle этого с помощью
$cookieStore, два контроллера, a$rootScope, и AngularjS 1.0.6. Это на 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 () { });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 чтобы использовать его.
AngularJS предоставляет модуль ngCookies и сервис $cookieStore для использования файлов cookie браузера.
нам нужно добавить угловые куки.минута.js-файл для использования функции cookie.
здесь есть какой-то метод в AngularJS печенья.
get (key); // этот метод возвращает значение данного ключа cookie.
getObject (key); / / этот метод возвращает десериализованное значение заданного ключ от печенья.
getAll (); / / это метод возвращает объект значения ключа со всеми cookies.
put(key, value, [options]); / / этот метод устанавливает значение для заданного ключ от печенья.
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.
добавить angular cookie lib: angular-cookies.js
вы можете использовать параметр $cookies или $cookieStore для соответствующего контроллера
главный контроллер добавить это ввести 'ngCookies':
angular.module("myApp", ['ngCookies']);используйте куки в контроллере следующим образом:
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.плагин куки. Несколько месяцев назад, однако, он был переименован в Яш-печенье и зависимость jQuery удалена. Одной из причин было просто упростить интеграцию с другими фреймворками, такими как Angular.
теперь, если вы хотите интегрировать Яш-печенье С угловой, это так же просто, как что-то вроде:
module.factory( "cookies", function() { return Cookies.noConflict(); });и это все. Нет в jQuery. Нет ngCookies.
вы также можете создавать пользовательские экземпляры для обработки определенных файлов cookie на стороне сервера, которые написаны по-разному. Возьмем для примера PHP, который преобразует пробелы
in the server-side to a plus sign+вместо того, чтобы также проценты-кодировать его: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 сохраняется, а затем восстанавливается после перезагрузки страницы.
приложение.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>приложение.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"); }; }]); })();
Comments