Cách AngularJS để truy cập cookie là gì? Tôi đã thấy các tài liệu tham khảo cho cả dịch vụ và mô-đun cho cookie, nhưng không có ví dụ.
Có, hoặc không có một cách tiếp cận kinh điển AngularJS?
Cách AngularJS để truy cập cookie là gì? Tôi đã thấy các tài liệu tham khảo cho cả dịch vụ và mô-đun cho cookie, nhưng không có ví dụ.
Có, hoặc không có một cách tiếp cận kinh điển AngularJS?
Câu trả lời:
Câu trả lời này đã được cập nhật để phản ánh phiên bản angularjs ổn định mới nhất. Một lưu ý quan trọng $cookieStore
là một lớp bọc mỏng bao quanh $cookies
. Chúng khá giống nhau ở chỗ chúng chỉ hoạt động với cookie phiên. Mặc dù, điều này trả lời cho câu hỏi ban đầu, có một số giải pháp khác mà bạn có thể muốn xem xét như sử dụng plugin cục bộ hoặc plugin jquery.cookie (sẽ cung cấp cho bạn quyền kiểm soát chi tiết hơn và làm cookie máy chủ. Tất nhiên làm như vậy trong angularjs có nghĩa là bạn có lẽ sẽ muốn bọc chúng trong một dịch vụ và sử dụng $scope.apply
để thông báo các thay đổi cho các mô hình (trong một số trường hợp).
Một lưu ý khác và đó là có một chút khác biệt giữa hai khi rút dữ liệu ra tùy thuộc vào việc bạn đã sử dụng $cookie
để lưu trữ giá trị hay $cookieStore
. Tất nhiên, bạn thực sự muốn sử dụng cái này hay cái khác.
Ngoài việc thêm tham chiếu vào tệp js, bạn cần đưa ngCookies
vào định nghĩa ứng dụng của mình, chẳng hạn như:
angular.module('myApp', ['ngCookies']);
sau đó bạn nên đi
Dưới đây là một ví dụ tối thiểu về chức năng, trong đó tôi chỉ ra rằng đó cookieStore
là một trình bao bọc mỏng xung quanh 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>
Các bước là:
angular.js
angular-cookies.js
ngCookies
vào mô-đun ứng dụng của bạn (và đảm bảo bạn tham chiếu mô-đun đó trong ng-app
thuộc tính)$cookies
hoặc $cookieStore
tham số cho bộ điều khiểncookieStore
bằng phương thức put / getĐây là cách bạn có thể đặt và nhận giá trị cookie. Đây là những gì tôi đã tìm kiếm ban đầu khi tôi tìm thấy câu hỏi này.
Lưu ý chúng tôi sử dụng $cookieStore
thay vì$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 không dùng nữa $cookieStore
trong phiên bản 1.4.x, vì vậy hãy sử dụng $cookies
thay thế nếu bạn đang sử dụng phiên bản mới nhất của angular. Cú pháp vẫn giữ nguyên cho $cookieStore
& $cookies
:
$cookies.put("key", "value");
var value = $cookies.get("key");
Xem Tài liệu để biết tổng quan về API. Cũng lưu ý rằng dịch vụ cookie đã được cải tiến với một số tính năng quan trọng mới như thiết lập hết hạn (xem câu trả lời này ) và tên miền (xem Tài liệu CookiesProvider ).
Lưu ý rằng, trong phiên bản 1.3.x trở xuống, $ cookie có cú pháp khác với ở trên:
$cookies.key = "value";
var value = $cookies.value;
Ngoài ra nếu bạn đang sử dụng Bower, hãy đảm bảo nhập chính xác tên gói của bạn:
bower install angular-cookies@X.Y.Z
XYZ là phiên bản AngularJS bạn đang chạy. Có một gói khác trong bower "angular-cookie" (không có 's') không phải là gói góc chính thức.
FYI, tôi kết hợp một JSFiddle về điều này bằng cách sử dụng $cookieStore
, hai bộ điều khiển, a $rootScope
và AngularjS 1.0.6. Đó là trên JSFifddle với tên http://jsfiddle.net/krimple/9dSb2/ làm cơ sở nếu bạn đang loay hoay với điều này ...
Ý chính của nó là:
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
Đảm bảo bạn bao gồm http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js để sử dụng nó.
$cookieStore
chữ ký của bộ điều khiển của mình (ví dụ function AccountCtrl($scope, $cookieStore)
), nhưng sau đó nhận được thông báo lỗi sau: Nhà cung cấp không xác định: $ cookieStoreProvider <- $ cookieStore
$cookieStore
chủ yếu là dành cho các cookie do khách hàng tạo ra. Để truy cập cookie do máy chủ tạo, tôi phải sử dụng $cookies
thay thế.
https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js
Xem bài đăng trên blog: blog.angularjs.org /
AngularJS cung cấp mô-đun ngCookies và dịch vụ $ cookieStore để sử dụng Cookies trình duyệt.
Chúng ta cần thêm tệp angular-cookies.min.js để sử dụng tính năng cookie.
Đây là một số phương pháp của AngularJS Cookie.
lấy (chìa khóa); // Phương thức này trả về giá trị của khóa cookie đã cho.
getObject (khóa); // Phương thức này trả về giá trị khử của khóa cookie đã cho.
lấy tất cả(); // Phương thức này trả về một đối tượng giá trị khóa với tất cả các cookie.
đặt (khóa, giá trị, [tùy chọn]); // Phương thức này đặt một giá trị cho khóa cookie đã cho.
xóa (khóa, [tùy chọn]); // Phương pháp này loại bỏ cookie đã cho.
Thí dụ
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'); }]);
Tôi đã tham khảo từ http://www.tutsway.com/simple-example-of-cookie-in-angular-js.php .
Thêm lib góc cookie: angular-cookies.js
Bạn có thể sử dụng tham số $ cookies hoặc $ cookieStore cho bộ điều khiển tương ứng
Bộ điều khiển chính thêm phần tiêm 'ngCookies' này:
angular.module("myApp", ['ngCookies']);
Sử dụng Cookies trong bộ điều khiển của bạn như thế này:
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'); }
Câu trả lời ban đầu được chấp nhận đề cập đến plugin jquery.cookie . Một vài tháng trước, nó đã được đổi tên thành js-cookie và loại bỏ phụ thuộc jQuery. Một trong những lý do là để dễ dàng tích hợp với các khung công tác khác, như Angular.
Bây giờ, nếu bạn muốn tích hợp js-cookie với góc cạnh, nó dễ dàng như một cái gì đó như:
module.factory( "cookies", function() {
return Cookies.noConflict();
});
Và đó là nó. Không có jQuery. Không ngCookies.
Bạn cũng có thể tạo các phiên bản tùy chỉnh để xử lý các cookie phía máy chủ cụ thể được viết khác nhau. Lấy ví dụ PHP, chuyển đổi các khoảng trắng ở phía máy chủ thành dấu cộng
+
thay vì mã hóa phần trăm:
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, ' ')
});
});
Việc sử dụng cho Nhà cung cấp tùy chỉnh sẽ giống như thế này:
module.service( "customDataStore", [ "phpCookies", function( phpCookies ) {
this.storeData = function( data ) {
phpCookies.set( "data", data );
};
this.containsStoredData = function() {
return phpCookies.get( "data" );
}
}]);
Tôi hy vọng điều này sẽ giúp bất cứ ai.
Xem thông tin chi tiết trong vấn đề này: https://github.com/js-cookie/js-cookie/issues/103
Để biết tài liệu chi tiết về cách tích hợp với phía máy chủ, xem tại đây: https://github.com/js-cookie/js-cookie/blob/master/SERVER_SIDE.md
Đây là một ví dụ đơn giản sử dụng $ cookies. Sau khi nhấp vào nút, cookie được lưu và sau đó được khôi phục sau khi trang được tải lại.
ứng dụng.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");
};
}]);
})();