# Developer Guide: About MVC in Angular: Understanding the Model Component

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

Depending on the context of the discussion in angular documentation, the term model can refer to either a single object representing one entity (for example, a model called "phones" with its value being an array of phones) or the entire data model for the application (all entities).

In angular, a model is any data that is reachable as a property of an angular Scope object. The name of the property is the model identifier and the value is any JavaScript object (including arrays and primitives).

The only requirement for a JavaScript object to be a model in angular is that the object must be referenced by an angular scope as a property of that scope object. This property reference can be created explicitly or implicitly.

You can create models by explicitly creating scope properties referencing JavaScript objects in the following ways:

- Make a direct property assignment to the scope object in JavaScript code; this most commonly occurs in controllers:

       function MyCtrl() {
           // create property 'foo' on the MyCtrl's scope
           // and assign it an initial value 'bar'
           this.foo = 'bar';
       }

- Use an angular expression with an assignment operator in templates:

       <button ng:click="{{foos='ball'}}">Click me</button>

- Use `ng:init directive` in templates (for toy/example apps only, not recommended for real applications):

       <body ng:init=" foo = 'bar' ">

Angular creates models implicitly (by creating a scope property and assigning it a suitable value) when processing the following template constructs:

- Form input, select, textarea and other form elements:

       <input name="query" value="fluffy cloud">

  The code above creates a model called "query" on the current scope with the value set to "fluffy cloud".

- An iterator declaration in `ng:repeater`:

       <p ng:repeat="phone in phones"></p>

  The code above creates one child scope for each item in the "phones" array and creates a "phone" object (model) on each of these scopes with its value set to the value of "phone" in the array.

In angular, a JavaScript object stops being a model when:

- No angular scope contains a property that references the object.

- All angular scopes that contain a property referencing the object become stale and eligible for garbage collection.

The following illustration shows a simple data model created implicitly from a simple template:

### Related Topics

- About MVC in Angular
- Understanding the Controller Component
- Understanding the View Component