# 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

- Angular Scope Objects
- Understanding Angular Scope Objects
- Working With Angular Scopes
- Applying Controllers to Scopes

### Related API

- `Angular Scope API`