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.

Reply via email to