Apa cara AngularJS untuk mengakses cookie? Saya telah melihat referensi untuk layanan dan modul untuk cookie, tetapi tidak ada contoh.
Apakah ada, atau tidak ada pendekatan kanonik AngularJS?
Apa cara AngularJS untuk mengakses cookie? Saya telah melihat referensi untuk layanan dan modul untuk cookie, tetapi tidak ada contoh.
Apakah ada, atau tidak ada pendekatan kanonik AngularJS?
Jawaban:
Jawaban ini telah diperbarui untuk mencerminkan versi angularjs stabil terbaru. Satu catatan penting adalah bahwa $cookieStore
pembungkus tipis di sekitarnya $cookies
. Mereka hampir sama karena mereka hanya bekerja dengan cookie sesi. Meskipun, ini menjawab pertanyaan awal, ada solusi lain yang mungkin ingin Anda pertimbangkan seperti menggunakan penyimpanan lokal, atau plugin jquery.cookie (yang akan memberi Anda lebih banyak kontrol yang baik dan melakukan cookie di sisi server. Tentu saja melakukannya di angularjs berarti Anda mungkin ingin membungkusnya dalam layanan dan digunakan $scope.apply
untuk memberi tahu sudut perubahan pada model (dalam beberapa kasus).
Satu catatan lain dan itu adalah bahwa ada sedikit perbedaan antara keduanya ketika menarik data tergantung pada apakah Anda dulu $cookie
menyimpan nilai atau $cookieStore
. Tentu saja, Anda benar-benar ingin menggunakan yang satu atau yang lain.
Selain menambahkan referensi ke file js Anda perlu menyuntikkan ngCookies
ke definisi aplikasi Anda seperti:
angular.module('myApp', ['ngCookies']);
Anda kemudian harus baik untuk pergi.
Berikut adalah contoh minimal fungsional, di mana saya menunjukkan itu cookieStore
adalah pembungkus tipis di sekitar 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>
Langkah-langkahnya adalah:
angular.js
angular-cookies.js
ngCookies
ke modul aplikasi Anda (dan pastikan Anda referensi modul itu di ng-app
atribut)$cookies
atau $cookieStore
parameter ke controllercookieStore
menggunakan metode put / getIni adalah bagaimana Anda dapat mengatur dan mendapatkan nilai cookie. Inilah yang awalnya saya cari ketika saya menemukan pertanyaan ini.
Catatan yang kami gunakan $cookieStore
bukan$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>
Sudut usang $cookieStore
dalam versi 1.4.x, jadi gunakan $cookies
sebagai gantinya jika Anda menggunakan versi sudut terbaru. Sintaksnya tetap sama untuk $cookieStore
& $cookies
:
$cookies.put("key", "value");
var value = $cookies.get("key");
Lihat Documents untuk ikhtisar API. Perlu diingat juga bahwa layanan cookie telah ditingkatkan dengan beberapa fitur penting baru seperti mengatur kedaluwarsa (lihat jawaban ini ) dan domain (lihat CookiesProvider Documents ).
Perhatikan bahwa, dalam versi 1.3.x atau di bawah, $ cookies memiliki sintaks yang berbeda dari di atas:
$cookies.key = "value";
var value = $cookies.value;
Juga jika Anda menggunakan bower, pastikan untuk mengetikkan nama paket Anda dengan benar:
bower install angular-cookies@X.Y.Z
di mana XYZ adalah versi AngularJS yang Anda jalankan. Ada paket lain dalam bower "angular-cookie" (tanpa 's') yang bukan paket sudut resmi.
FYI, saya mengumpulkan JSFiddle ini menggunakan $cookieStore
, dua kontroler, a $rootScope
, dan AngularjS 1.0.6. Ada di JSFifddle sebagai http://jsfiddle.net/krimple/9dSb2/ sebagai pangkalan jika Anda bermain-main dengan ini ...
Intinya adalah:
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
Pastikan Anda menyertakan http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js untuk menggunakannya.
$cookieStore
ke tanda tangan controller saya (yaitu function AccountCtrl($scope, $cookieStore)
), tetapi kemudian mendapatkan pesan kesalahan berikut: Penyedia tidak dikenal: $ cookieStoreProvider <- $ cookieStore
$cookieStore
sebagian besar ditujukan untuk cookie yang dibuat oleh klien. Untuk mengakses cookie yang dihasilkan server, saya harus menggunakannya $cookies
.
https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js
) Lihat posting blog: blog.angularjs.org /
AngularJS menyediakan modul ngCookies dan layanan $ cookieStore untuk menggunakan Cookie Browser.
Kita perlu menambahkan file angular-cookies.min.js untuk menggunakan fitur cookie.
Berikut adalah beberapa metode Cookie AngularJS.
dapatkan (kunci); // Metode ini mengembalikan nilai kunci cookie yang diberikan.
getObject (kunci); // Metode ini mengembalikan nilai deserialized dari kunci cookie yang diberikan.
dapat semua(); // Metode ini mengembalikan objek nilai kunci dengan semua cookie.
put (kunci, nilai, [opsi]); // Metode ini menetapkan nilai untuk kunci cookie yang diberikan.
hapus (kunci, [opsi]); // Metode ini menghapus cookie yang diberikan.
Contoh
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'); }]);
Saya telah mengambil referensi dari http://www.tutsway.com/simple-example-of-cookie-in-angular-js.php .
Tambahkan angular cookie lib: angular-cookies.js
Anda dapat menggunakan parameter $ cookies atau $ cookieStore ke controller masing-masing
Kontroler utama menambahkan suntikan ini 'ngCookies':
angular.module("myApp", ['ngCookies']);
Gunakan Cookie di controller Anda seperti ini:
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'); }
Jawaban asli yang diterima menyebutkan plugin jquery.cookie . Namun beberapa bulan yang lalu, namanya diubah menjadi js-cookie dan ketergantungan jQuery dihapus. Salah satu alasannya adalah membuatnya mudah diintegrasikan dengan kerangka kerja lain, seperti Angular.
Sekarang, jika Anda ingin mengintegrasikan js-cookie dengan sudut, semudah seperti:
module.factory( "cookies", function() {
return Cookies.noConflict();
});
Dan itu saja. Tidak ada jQuery. Tanpa ngCookies.
Anda juga dapat membuat instance kustom untuk menangani cookie sisi server tertentu yang ditulis secara berbeda. Ambil contoh PHP, yang mengubah spasi di sisi server menjadi tanda tambah
+
alih-alih juga persen-kodekan:
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, ' ')
});
});
Penggunaan untuk Penyedia kustom akan seperti ini:
module.service( "customDataStore", [ "phpCookies", function( phpCookies ) {
this.storeData = function( data ) {
phpCookies.set( "data", data );
};
this.containsStoredData = function() {
return phpCookies.get( "data" );
}
}]);
Saya harap ini membantu siapa pun.
Lihat info terperinci dalam edisi ini: https://github.com/js-cookie/js-cookie/issues/103
Untuk dokumen terperinci tentang cara mengintegrasikan dengan sisi server, lihat di sini: https://github.com/js-cookie/js-cookie/blob/master/SERVER_SIDE.md
Berikut ini contoh sederhana menggunakan $ cookies. Setelah mengklik tombol, cookie disimpan, dan kemudian dikembalikan setelah halaman dimuat ulang.
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");
};
}]);
})();