Как AngularJS способ получить доступ к куки? Я видел ссылки как на сервис, так и на модуль для файлов cookie, но примеров нет.
Есть или нет канонический подход AngularJS?
Как AngularJS способ получить доступ к куки? Я видел ссылки как на сервис, так и на модуль для файлов cookie, но примеров нет.
Есть или нет канонический подход AngularJS?
Ответы:
Этот ответ был обновлен, чтобы отразить последнюю стабильную версию 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 устарела $cookieStore
в версии 1.4.x, поэтому используйте $cookies
вместо этого, если вы используете последнюю версию angular. Синтаксис остается неизменным для $cookieStore
& $cookies
:
$cookies.put("key", "value");
var value = $cookies.get("key");
См. Документы для обзора API. Помните также, что служба cookie была расширена за счет некоторых новых важных функций, таких как установка срока действия (см. Этот ответ ) и домена (см. Документы CookiesProvider ).
Обратите внимание, что в версии 1.3.x или ниже $ cookies имеет другой синтаксис, чем выше:
$cookies.key = "value";
var value = $cookies.value;
Также, если вы используете bower, убедитесь, что правильно набрали название вашего пакета:
bower install angular-cookies@X.Y.Z
где XYZ - версия 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, чтобы использовать его.
$cookieStore
подпись моего контроллера (т.е. function AccountCtrl($scope, $cookieStore)
), но затем получил следующее сообщение об ошибке: Неизвестный поставщик: $ cookieStoreProvider <- $ cookieStore
$cookieStore
по-видимому, в основном предназначено для клиентских файлов cookie. Чтобы получить доступ к сгенерированным сервером куки, я должен был использовать $cookies
вместо этого.
https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js
) Смотрите сообщение в блоге: blog.angularjs.org /
AngularJS предоставляет модуль ngCookies и сервис $ cookieStore для использования файлов cookie браузера.
Нам нужно добавить файл angular-cookies.min.js, чтобы использовать функцию cookie.
Вот несколько методов AngularJS Cookie.
получить (ключ); // Этот метод возвращает значение данного ключа cookie.
GetObject (ключ); // Этот метод возвращает десериализованное значение данного ключа cookie.
получить все(); // Этот метод возвращает объект значения ключа со всеми файлами cookie.
положить (ключ, значение, [параметры]); // Этот метод устанавливает значение для данного ключа cookie.
удалить (ключ, [опции]); // Этот метод удаляет данный 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 .
Добавьте угловой файл lib: 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");
};
}]);
})();