Developer Guide: Scopes: Updating Scope Properties

Work in Progress This page is currently being revised. It might be incomplete or contain inaccuracies.

You can update a scope by calling its $eval() method, but usually you do not have to do this explicitly. In most cases, angular intercepts all external events (such as user interactions, XHRs, and timers) and calls the $eval() method on the scope object for you at the right time. The only time you might need to call $eval() explicitly is when you create your own custom widget or service.

The reason it is unnecessary to call $eval() from within your controller functions when you use built-in angular widgets and services is because a change in the data model triggers a call to the $eval() method on the scope object where the data model changed.

When a user inputs data, angularized widgets copy the data to the appropriate scope and then call the $eval() method on the root scope to update the view. It works this way because scopes are inherited, and a child scope $eval() overrides its parent's $eval() method. Updating the whole page requires a call to $eval() on the root scope as $root.$eval(). Similarly, when a request to fetch data from a server is made and the response comes back, the data is written into the model and then $eval() is called to push updates through to the view and any other dependents.

A widget that creates scopes (such as ng:repeat) is responsible for forwarding $eval() calls from the parent to those child scopes. That way, calling $eval() on the root scope will update the whole page. This creates a spreadsheet-like behavior for your app; the bound views update immediately as the user enters data.

Related Documents

Related API