कुकीज़ तक पहुँचने का AngularJS तरीका क्या है? मैंने कुकीज़ के लिए एक सेवा और एक मॉड्यूल दोनों के संदर्भ देखे हैं, लेकिन कोई उदाहरण नहीं।
वहाँ है, या वहाँ एक AngularJS विहित दृष्टिकोण नहीं है?
कुकीज़ तक पहुँचने का AngularJS तरीका क्या है? मैंने कुकीज़ के लिए एक सेवा और एक मॉड्यूल दोनों के संदर्भ देखे हैं, लेकिन कोई उदाहरण नहीं।
वहाँ है, या वहाँ एक AngularJS विहित दृष्टिकोण नहीं है?
जवाबों:
यह उत्तर नवीनतम स्थिर कोणीय संस्करणों को प्रतिबिंबित करने के लिए अद्यतन किया गया है। एक महत्वपूर्ण नोट यह है कि $cookieStoreआसपास एक पतला आवरण है $cookies। वे इसमें बहुत अधिक हैं कि वे केवल सत्र कुकीज़ के साथ काम करते हैं। हालांकि, यह मूल प्रश्न का उत्तर देता है, ऐसे अन्य समाधान हैं जिन पर आप स्थानीय स्तर पर या jquery.cookie प्लगइन का उपयोग करने पर विचार कर सकते हैं (जो आपको और अधिक सुव्यवस्थित नियंत्रण प्रदान करेगा और कुकीज़ को सर्वर पर करेगा। निश्चित रूप से कोणीय में ऐसा करने का अर्थ है। शायद उन्हें एक सेवा में लपेटना चाहते हैं और $scope.applyमॉडल (कुछ मामलों में) में परिवर्तन के कोणीय को सूचित करने के लिए उपयोग करना चाहते हैं ।
एक अन्य ध्यान दें और वह यह है कि यदि आप $cookieमूल्य को संग्रहीत करते थे या उपयोग करते हैं, तो इसके आधार पर डेटा खींचते समय दोनों के बीच थोड़ा अंतर होता है $cookieStore। बेशक, आप वास्तव में एक या दूसरे का उपयोग करना चाहते हैं।
जेएस फ़ाइल के संदर्भ को जोड़ने के अलावा आपको 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.jsangular-cookies.jsngCookiesअपने ऐप मॉड्यूल में इंजेक्ट करें (और सुनिश्चित करें कि आप उस मॉड्यूल को ng-appविशेषता में देखें)$cookiesया $cookieStoreपैरामीटर जोड़ेंcookieStoreपुट / मेथड्स का उपयोग करकेयह है कि आप कुकी मान कैसे सेट और प्राप्त कर सकते हैं। यह वही है जो मैं मूल रूप से देख रहा था जब मुझे यह प्रश्न मिला।
ध्यान दें कि हम $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");
एपीआई अवलोकन के लिए डॉक्स देखें । यह भी ध्यान रखें कि कुकी सेवा को समाप्ति की समय सीमा (जैसे यह उत्तर देखें ) और डोमेन ( CookiesProvider डॉक्स देखें) जैसी कुछ नई महत्वपूर्ण विशेषताओं के साथ बढ़ाया गया है ।
ध्यान दें कि, संस्करण 1.3.x या उससे नीचे, $ कुकीज़ में ऊपर की तुलना में एक अलग वाक्यविन्यास है:
$cookies.key = "value";
var value = $cookies.value;
यदि आप बोवर का उपयोग कर रहे हैं, तो अपने पैकेज का नाम सही ढंग से लिखना सुनिश्चित करें:
bower install angular-cookies@X.Y.Z
जहाँ XYZ आपके द्वारा चलाए जा रहे AngularJS संस्करण है। बोवर "कोणीय-कुकी" ('एस' के बिना) में एक और पैकेज है जो आधिकारिक कोणीय पैकेज नहीं है।
FYI करें, मैंने इसे एक JSFiddle को $cookieStoreदो नियंत्रकों, ए $rootScopeऔर एंगुलरजस 1.0.6 का उपयोग करके रखा । यदि आप इसके साथ खिलवाड़ कर रहे हैं तो यह एक आधार के रूप में JSFifddle पर http://jsfiddle.net/krimple/9dSb2/ है ...
इसका सार यह है:
जावास्क्रिप्ट
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 () {
});
एचटीएमएल
<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)) के हस्ताक्षर में जोड़ा , लेकिन फिर निम्न त्रुटि संदेश प्राप्त करें: अज्ञात प्रदाता: $ कुकीस्टॉरप्रोवाइडर <- $ कुकीस्टेर
$cookieStoreजाहिरा तौर पर ज्यादातर क्लाइंट-जनरेटेड कुकीज़ के लिए है। सर्वर-जनरेटेड कुकीज़ तक पहुंचने के लिए, मुझे $cookiesइसके बजाय उपयोग करना था।
https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js) ब्लॉग पोस्ट देखें: blog.angularjs.org / २०१२ /
AngularJS ब्राउज़र कुकीज़ का उपयोग करने के लिए ngCookies मॉड्यूल और $ कुकी सेवा प्रदान करता है।
हमें कुकी फ़ीचर का उपयोग करने के लिए कोणीय-कुकीज़.min.js फ़ाइल को जोड़ना होगा।
यहाँ AngularJS कुकी की कुछ विधि दी गई है।
चाबी देना); // यह विधि दिए गए कुकी कुंजी का मान लौटाती है।
GetObject (कुंजी); // यह विधि दी गई कुँजी कुंजी का वांछित मान लौटाती है।
सब प्राप्त कर लिया(); // यह विधि सभी कुकीज़ के साथ एक महत्वपूर्ण मान ऑब्जेक्ट लौटाती है।
डाल (कुंजी, मूल्य, [विकल्प]); // यह विधि दी गई कुकी कुंजी के लिए एक मान निर्धारित करती है।
निकालें (कुंजी, [विकल्प]); // यह विधि दी गई कुकी को हटा दें।
उदाहरण
एचटीएमएल
<!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>
जावास्क्रिप्ट
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 से संदर्भ लिया गया है ।
कोणीय कुकी लिब जोड़ें: कोणीय-कुकीज़.जेएस
आप संबंधित कंट्रोलर को $ कुकीज़ या $ कुकीस्टेयर पैरामीटर का उपयोग कर सकते हैं
मुख्य नियंत्रक इस इंजेक्शन को '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.cookie प्लगइन का उल्लेख है । हालांकि कुछ महीने पहले, इसे js-कुकी नाम दिया गया था और jQuery निर्भरता हटा दी गई थी। इसका एक कारण कोणीय जैसे अन्य फ्रेमवर्क के साथ एकीकृत करना आसान बनाना था।
अब, यदि आप js-कुकी को कोणीय के साथ एकीकृत करना चाहते हैं, तो यह कुछ इस तरह से आसान है:
module.factory( "cookies", function() {
return Cookies.noConflict();
});
और बस। कोई jQuery नहीं। कोई कालजयी नहीं।
आप विशिष्ट सर्वर-साइड कुकीज़ को संभालने के लिए कस्टम इंस्टेंस भी बना सकते हैं जो अलग-अलग लिखे गए हैं। उदाहरण के लिए 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
यहाँ $ कुकीज़ का उपयोग करके एक सरल उदाहरण दिया गया है। बटन पर क्लिक करने के बाद, कुकी बच जाती है, और फिर पृष्ठ को फिर से लोड किए जाने के बाद पुनर्स्थापित किया जाता है।
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");
};
}]);
})();