Depending on the context of the discussion in the 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($scope) {
// create property 'foo' on the MyCtrl's scope
// and assign it an initial value 'bar'
$scope.foo = 'bar';
}
Use an angular expression with an assignment operator in templates:
<button ng-click="{{foos='ball'}}">Click me</button>
Use ngInit 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 ng-model="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 ngRepeater
:
<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: