As it turns out - after investigating further - I didn't fully understand how $watch worked.
http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ really helped shed some light on the situation.
As it turns out - simply changing a variable that is being watched won't trigger a digest loop by itself.
The reason $timeout
worked was because it "safely" makes a call to $digest
which causes all $watch
expressions to be evaluated - that is, it was the $digest
component of the $timeout
that caused the $watch
to fire and not the wait of 1000 milliseconds.
Lesson learned.