Although this approach appeared to work under Chrome as i discovered while testing under IE and FF these cookies are in fact session cookies and so persist only in memory so when all tabs of the browser app close the session is removed.
Although, as I investigated to certain point, it is possible to set an expiry date on the cookie in order to store it to disk (by use of javascript, the angular $cookieStore/$cookie services do not yet allow the manipulation of cookie properties) I discovered (i did mention i was new to this right?) that the HTML5 feature localStorage is what i need. The methods localStorage.setItem() & localStorage.getItem() easily persist my simple JSON object (with appropriate string conversion) and can be cleared from the relevant browser settings. I have no need to send this information to the server and i do not need to support older browsers that do not support this feature. Thanks to anyone who read my post, sooner or later i will have to deal with cookies so it has been a learning experience as well as a distraction. On Monday, January 27, 2014 10:38:24 AM UTC, Gary Cuthbert wrote: > > I have updated the code to use $cookieStore in the 'beforeunload' handler > and make a call to $scope.$apply() which ensures the document.cookie object > is updated with the $cookieStore content before the handler returns. > > 'http://plnkr.co/edit/9a4e9P?p=preview' > > Does this approach raise any alarms with any angular experts out there? > $apply is a synchronous call right? > > On Friday, January 24, 2014 1:05:29 PM UTC, Gary Cuthbert wrote: >> >> I have made some progress with this and have updated the plunk to >> demonstrate: >> >> 'http://plnkr.co/edit/9a4e9P?p=preview' >> >> Below is my attempt to explain the behavior which sounds plausible to me. >> I do also have a question about triggering an angular update right at the >> end of this post, perhaps someone could advise if this is possible in this >> context and if so how to do it?? >> >> Many thanks >> -- >> >> As i suspected it appears to be a timing issue as to when the $cookies >> object is updates/updates the main document.cookie. >> >> I have added a method to my controller 'updateDocumentCookie' which >> updates the $window.document.cookie object directly. If i call this method >> from my 'unloadProcessing()' handler then the updates are applied to the >> document.cookie object and can be found within the angular $cookies object >> when the controller 'startup()' method is called following a refresh. >> >> Conversely during 'startup()' i make a change to the $cookie object and >> check the document.cookie object, i can confirm at this point the change >> has not propagated to the document.cookie. On a subsequent call to >> unloadProcessing (by triggering a refresh) it can be seen that the >> controller changes made to $cookies are propogated to the document.cookie >> object by the time this handler is called. >> >> To reproduce this with the plunk click on the link and run it. Clear you >> browser cache, open your browser debug output console and clear it, hit the >> 'trigger a manual refresh of the preview'. You should get something like >> the following in the browser debug console: >> >> unloadProcessing() called $cookies: >> Object {} >> document.cookies : >> *As expected following a cache clear both $cookies and document.cookies >> are empty* >> >> unloadProcessing() returning $cookies: >> Object {} >> document.cookies : >> ____cookieVal1=%22set in unloadProcessing!%22 >> *Having manipulated document.cookies in the 'unloadProcessing' handler we >> can see that the document.cookies object has been updated but the $cookies >> object has not.* >> >> *Now on reload the startup() method on AppController is ultimately >> called...* >> startup() called $cookies: >> Object {____cookieVal1: ""set in unloadProcessing!""} >> document.cookies : >> ____cookieVal1=%22set in unloadProcessing!%22 >> *On the initial load the $cookies object reflects the doocument.cookie >> object* >> >> Applied change to $cookieStore for "____cookieVal2" during startup. >> $cookies: >> Object {____cookieVal1: ""set in unloadProcessing!"", ____cookieVal2: >> ""value >> 2 set in startup!""} >> document.cookies : >> ____cookieVal1=%22set in unloadProcessing!%22 >> >> *The startup() method changes the content of $cookies by calling the put >> method on $cookieStore, the changes to $cookie can be seen and it can also >> be seen that the document.cookies object has not yet been updated. If you >> hit refresh again you will see the $cookie content has update the >> document.cookie object by the time unloadProcessing is called.* >> >> *---* >> >> *Q. As you may expect if the document.cookie object is updated in >> startup() instead of $cookieStore it does not apply the change to $cookie. >> Presumably this is because angular needs to be triggered to update which >> makes me wonder if it is viable to manipulate the $cookieStore object in >> the unloadProcessing() handler and trigger an angular update to flush the >> changes to document.cookie before the handler call returns?* >> >> 1. >> >> >> On Thursday, January 23, 2014 6:15:14 PM UTC, Gary Cuthbert wrote: >>> >>> I have put together a plunk to demonstrate, i would really appreciate >>> the benefit of your expertise... >>> >>> 'http://plnkr.co/edit/9a4e9P?p=preview' >>> >>> If you run in the plunker preview window, clear your cookie cache and >>> hit the 'manually trigger a refresh of the preview' button you will get >>> something like the following in the console window: >>> >>> unloadProcessing() called $cookies: >>> Object {____cookieVal2: ""value 2 set in startup!""} >>> unloadProcessing() returning $cookies: >>> Object {____cookieVal2: ""value 2 set in startup!"", ____cookieVal1: ""set >>> in unloadProcessing!""} >>> startup() called $cookies: >>> Object {____cookieVal2: ""value 2 set in startup!""} >>> startup() returning $cookies: >>> Object {____cookieVal2: ""value 2 set in startup!""} >>> >>> Is it too late by the time the 'unloadProcessing' method is called to >>> make changes to $cookieStore? >>> >>> Many thanks >>> >>> On Wednesday, January 22, 2014 5:01:20 PM UTC, Gary Cuthbert wrote: >>>> >>>> Hello, >>>> >>>> I am currently investigating the use of $cookieStore to record some >>>> trivial application settings and would like to update the $cookieStore >>>> when >>>> the application is going through the process of tear down (either when the >>>> user hits the browser reload button or closes the window or navigates away >>>> from the application). >>>> >>>> Is this possible? I have a controller associated with my main <div >>>> ng-app="app"> element and I have tried trapping for $destroy in this >>>> controller and attempting the updates in its handler but the event is not >>>> trapped. >>>> >>>> I could update the $cookieStore periodically in this case but i suspect >>>> sooner or later i will need to be able to perform application cleanup >>>> logic >>>> so in general how would/can you detect that an angular application is >>>> about >>>> to close? >>>> >>>> Many thanks >>>> >>> -- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/groups/opt_out.
