angular.directive.ng:controller

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

Description

To support the Model-View-Controller design pattern, it is possible to assign behavior to a scope through ng:controller. The scope is the MVC model. The HTML (with data bindings) is the MVC view. The ng:controller directive specifies the MVC controller class

Usage

<ANY ng:controller="expression">
   ...
</ANY>

Parameters

Example

Here is a simple form for editing the user contact information. Adding, removing clearing and greeting are methods which are declared on the controller (see source tab). These methods can easily be called from the angular markup. Notice that the scope becomes the controller's class this. This allows for easy access to the view data from the controller. Also notice that any changes to the data are automatically reflected in the view without the need to update it manually.

<script type="text/javascript"> function SettingsController() { this.name = "John Smith"; this.contacts = [ {type:'phone', value:'408 555 1212'}, {type:'email', value:'john.smith@example.org'} ]; } SettingsController.prototype = { greet: function(){ alert(this.name); }, addContact: function(){ this.contacts.push({type:'email', value:'yourname@example.org'}); }, removeContact: function(contactToRemove) { angular.Array.remove(this.contacts, contactToRemove); }, clearContact: function(contact) { contact.type = 'phone'; contact.value = ''; } }; </script> <div ng:controller="SettingsController"> Name: <input type="text" name="name"/> [ <a href="" ng:click="greet()">greet</a> ]<br/> Contact: <ul> <li ng:repeat="contact in contacts"> <select name="contact.type"> <option>phone</option> <option>email</option> </select> <input type="text" name="contact.value"/> [ <a href="" ng:click="clearContact(contact)">clear</a> | <a href="" ng:click="removeContact(contact)">X</a> ] </li> <li>[ <a href="" ng:click="addContact()">add</a> ]</li> </ul> </div> it('should check controller', function(){ expect(element('.doc-example-live div>:input').val()).toBe('John Smith'); expect(element('.doc-example-live li[ng\\:repeat-index="0"] input').val()).toBe('408 555 1212'); expect(element('.doc-example-live li[ng\\:repeat-index="1"] input').val()).toBe('john.smith@example.org'); element('.doc-example-live li:first a:contains("clear")').click(); expect(element('.doc-example-live li:first input').val()).toBe(''); element('.doc-example-live li:last a:contains("add")').click(); expect(element('.doc-example-live li[ng\\:repeat-index="2"] input').val()).toBe('yourname@example.org'); });