The $apply
function can run on any scope, including $rootScope
.
Are there cases when it makes a difference if I run it on my local scope or if I run it on my $rootScope
?
I'm asking because I'd like to create a helper function that wraps a given function in an $apply
. To do that I'd always need to pass in a scope, which is A) annoying and B) not easy because I don't necessarily have a local scope.
I'd like to always have my helper function call $apply
on the $rootScope
, but not if there's some risk in doing that.
$rootScope exists, but it can be used for evilScopes in Angular form a hierarchy, prototypally inheriting from a root scope at the top of the tree. Usually this can be ignored, since most views have a controller, and therefore a scope, of their own.
The main difference is the availability of the property assigned with the object. A property assigned with $scope cannot be used outside the controller in which it is defined whereas a property assigned with $rootScope can be used anywhere.
$digest() function. This function iterates through all watches and checks if any of the watched variables have changed. If a watched variable has changed, a corresponding listener function is called.
One difference between the two is how they are called. $digest() gets called without any arguments. $apply() takes a function that it will execute before doing any updates.
Running $apply
on any scope always results in a $rootscope.$digest
. The only case where it might make a difference is when you provide an expression as an argument to $apply
. The expression will be evaluated in the current scope (vs. $rootScope), but afterwards $rootscope.$digest
is always called.
The source code is quite clear: rootScope.js
Bottom line: If you call $apply
with no arguments, it makes no difference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With