Wie kann AngularJS auf Cookies zugreifen? Ich habe Verweise sowohl auf einen Dienst als auch auf ein Modul für Cookies gesehen, aber keine Beispiele.
Gibt es einen kanonischen AngularJS-Ansatz oder nicht?
angularjs
angular-cookies
Ellis Whitehead
quelle
quelle
Antworten:
Diese Antwort wurde aktualisiert, um die neueste stabile Winkelversion widerzuspiegeln. Ein wichtiger Hinweis ist, dass
$cookieStore
es sich um eine dünne Hülle handelt$cookies
. Sie sind insofern ziemlich gleich, als sie nur mit Sitzungscookies arbeiten. Obwohl dies die ursprüngliche Frage beantwortet, gibt es andere Lösungen, die Sie möglicherweise in Betracht ziehen möchten, z. B. die Verwendung von localstorage oder das jquery.cookie-Plugin (das Ihnen eine genauere Kontrolle und die Erstellung von serverseitigen Cookies ermöglicht. Natürlich bedeutet dies, dass Sie dies in anglejs tun wahrscheinlich würde sie in einen Dienst einwickeln und verwenden wollen$scope.apply
einbinden , um Winkeländerungen an Modellen zu melden (in einigen Fällen).Ein weiterer Hinweis ist, dass es beim Abrufen von Daten einen geringfügigen Unterschied zwischen den beiden gibt, je nachdem, ob Sie
$cookie
Wert oder gespeichert haben$cookieStore
. Natürlich möchten Sie wirklich das eine oder andere verwenden.Zusätzlich zum Hinzufügen eines Verweises auf die js-Datei müssen Sie diese
ngCookies
in Ihre App-Definition einfügen, z.Sie sollten dann gut zu gehen sein.
Hier ist ein funktionales Minimalbeispiel, in dem ich zeige, dass
cookieStore
es sich um eine dünne Hülle um Cookies handelt:Die Schritte sind:
angular.js
angular-cookies.js
ngCookies
in Ihr App-Modul (und stellen Sie sicher, dass Sie auf dieses Modul in der App verweisenng-app
- Attribute)$cookies
oder hinzu$cookieStore
dem Controller Parameter hinzucookieStore
mit put / get-Methodenquelle
Auf diese Weise können Sie Cookie-Werte festlegen und abrufen. Dies ist, wonach ich ursprünglich gesucht habe, als ich diese Frage gefunden habe.
Beachten Sie, dass wir
$cookieStore
anstelle von verwenden$cookies
quelle
Angular ist in Version 1.4.x veraltet.
$cookieStore
Verwenden$cookies
Sie es stattdessen, wenn Sie die neueste Version von Angular verwenden . Die Syntax bleibt für$cookieStore
&$cookies
:Eine API-Übersicht finden Sie in den Dokumenten . Beachten Sie auch, dass der Cookie-Service mit einigen neuen wichtigen Funktionen wie dem Festlegen des Ablaufs (siehe diese Antwort ) und der Domain (siehe CookiesProvider-Dokumente ) erweitert wurde.
Beachten Sie, dass $ Cookies in Version 1.3.x oder niedriger eine andere Syntax haben als oben:
Auch wenn Sie Bower verwenden, stellen Sie sicher, dass Sie Ihren Paketnamen richtig eingeben:
Dabei ist XYZ die AngularJS-Version, die Sie ausführen. Es gibt ein weiteres Paket in der Laube "Angular-Cookie" (ohne das 's'), das nicht das offizielle Winkelpaket ist.
quelle
Zu Ihrer Information, ich habe eine JSFiddle davon mit den
$cookieStore
beiden Controllern a$rootScope
und AngularjS 1.0.6 zusammengestellt. Es ist auf JSFifddle als http://jsfiddle.net/krimple/9dSb2/ als Basis, wenn Sie damit herumspielen ...Der Kern davon ist:
Javascript
HTML
quelle
http://docs.angularjs.org/api/ngCookies.$cookieStore
Stellen Sie sicher, dass Sie http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js angeben , um es zu verwenden.
quelle
$cookieStore
der Signatur meines Controllers (dhfunction AccountCtrl($scope, $cookieStore)
) hinzu, erhielt dann jedoch die folgende Fehlermeldung: Unbekannter Anbieter: $ cookieStoreProvider <- $ cookieStore$cookieStore
anscheinend hauptsächlich für vom Kunden generierte Cookies gedacht ist. Um auf vom Server generierte Cookies zuzugreifen, musste ich$cookies
stattdessen verwenden.https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js
) Siehe Blog-Beitrag: blog.angularjs.org /AngularJS bietet das ngCookies-Modul und den $ cookieStore-Dienst zur Verwendung von Browser-Cookies.
Wir müssen die Datei angle-cookies.min.js hinzufügen, um die Cookie-Funktion verwenden zu können.
Hier ist eine Methode von AngularJS Cookie.
get (Schlüssel); // Diese Methode gibt den Wert des angegebenen Cookie-Schlüssels zurück.
getObject (Schlüssel); // Diese Methode gibt den deserialisierten Wert des angegebenen Cookie-Schlüssels zurück.
Nimm alle(); // Diese Methode gibt ein Schlüsselwertobjekt mit allen Cookies zurück.
put (Schlüssel, Wert, [Optionen]); // Diese Methode legt einen Wert für den angegebenen Cookie-Schlüssel fest.
entfernen (Schlüssel, [Optionen]); // Diese Methode entfernt gegebene Cookies.
Beispiel
Html
JavaScript
Ich habe Bezug genommen von http://www.tutsway.com/simple-example-of-cookie-in-angular-js.php .
quelle
Fügen Sie Angular Cookie Lib hinzu: Angular-Cookies.js
Sie können $ cookies oder $ cookieStore für den jeweiligen Controller verwenden
Hauptcontroller fügen diese Injektion 'ngCookies' hinzu:
Verwenden Sie Cookies in Ihrem Controller wie folgt:
quelle
Die ursprünglich akzeptierte Antwort erwähnt das jquery.cookie-Plugin . Vor einigen Monaten wurde es jedoch in js-cookie umbenannt und die jQuery-Abhängigkeit entfernt. Einer der Gründe war, die Integration in andere Frameworks wie Angular zu vereinfachen.
Wenn Sie js-cookie in angle integrieren möchten , ist dies so einfach wie:
Und das ist es. Keine jQuery. Keine ngCookies.
Sie können auch benutzerdefinierte Instanzen erstellen, um bestimmte serverseitige Cookies zu verarbeiten, die unterschiedlich geschrieben sind. Nehmen wir zum Beispiel PHP, das die Leerzeichen
auf der Serverseite in ein Pluszeichen umwandelt ,
+
anstatt es auch in Prozent zu codieren:Die Verwendung für einen benutzerdefinierten Anbieter wäre ungefähr so:
Ich hoffe das hilft jedem.
Detaillierte Informationen finden Sie in dieser Ausgabe: https://github.com/js-cookie/js-cookie/issues/103
Ausführliche Informationen zur Integration in die Serverseite finden Sie hier: https://github.com/js-cookie/js-cookie/blob/master/SERVER_SIDE.md
quelle
Hier ist ein einfaches Beispiel für die Verwendung von $ Cookies. Nach dem Klicken auf die Schaltfläche wird das Cookie gespeichert und nach dem erneuten Laden der Seite wiederhergestellt.
app.html:
app.js:
quelle