aboutsummaryrefslogtreecommitdiffstats
path: root/docs/content/misc/started.ngdoc
blob: a505b471ac6c08676ac64149827a7727cf2b1afd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
@workInProgress
@ngdoc overview
@name Getting Started
@description

# Hello World!

A great way for you to get started with `angular` is to create the tradtional 
"Hello World!" app:

1. In your favorite text editor, create an HTML file 
   (for example, `helloworld.html`). 
2. From the __Source__ box below, copy and paste the code into your HTML file.
   (Double-click on the source to easily select all.)
3. Open the file in your web browser.

<doc:example>
    <doc:source>
        Hello {{'World'}}!
    </doc:source>
</doc:example>

The resulting web page should look something like the following:

<img class="center" src="img/helloworld.png" border="1" />

Now let's take a closer look at that code, and see what is going on behind 
the scenes.  

The first line of interest defines the `ng` namespace, which makes 
`angular` work across all browsers (especially important for IE):

<pre>
    <html xmlns:ng="http://angularjs.org">
</pre>

The next line downloads the `angular` script, and instructs `angular` to process 
the entire HTML page when it is loaded:

<pre>
    <script type="text/javascript" src="http://code.angularjs.org/angular-?.?.?.min.js" ng:autobind></script>
</pre>

(For details on what happens when `angular` processes an HTML page, 
see {@link guide.bootstrap Bootstrap}.)

Finally, this line in the `<body>` of the page is the template that describes 
how to display our greeting in the UI:

<pre>
    Hello {{'World'}}!
</pre>

Note the use of the double curly brace markup (`{{ }}`) to bind the expression to 
the greeting text. Here the expression is the string literal 'World'.

Next let's look at a more interesting example, that uses `angular` to 
bind a dynamic expression to our greeting text.

# Hello <angular/> World!

This example demonstrates `angular`'s two-way data binding: 

1. Edit the HTML file you created in the "Hello World!" example above.
2. Replace the contents of `<body>` with the code from the __Source__ box below.
3. Refresh your browswer window.

<doc:example>
 <doc:source>
  Your name: <input type="text" name="yourname" value="World"/>
  <hr/>
  Hello {{yourname}}!
 </doc:source>
</doc:example>

After the refresh, the page should look something like this:

<img class="left" src="img/helloworld_2way.png" border="1" />

These are some of the important points to note from this example:

* The text input {@link angular.widget widget} called `yourname` is bound to a model variable called 
  `yourname`.
* The double curly braces notation binds the variable `yourname` to the 
  greeting text.
<!--
* The variable `yourname` is implicitly created in the root scope.
-->
* You did not need to explicitly register an event listener or define an event 
  handler for events!

Now try typing your name into the input box, and notice the immediate change to 
the displayed greeting. This demonstrates the concept of `angular`'s 
{@link guide.data-binding bi-directional data binding}. Any changes to the input field are immediately 
reflected in the model (one direction), and any changes to the model are 
reflected in the greeting text (the other direction).


# Anatomy of an `angular` App

This section describes the 3 parts of an `angular` app, and explains how they 
map to the Model-View-Controller design pattern:

## Templates

Templates, which you write in HTML and CSS, serve as the View. You add elements, 
attributes, and markup to HTML, which serve as instructions to the `angular` 
compiler. The `angular` compiler is fully extensible, meaning that with angular 
you can build your own declarative language on top of HTML!

## Application Logic and Behavior

Application Logic and Behavior, which you define in JavaScript, serve as the 
Controller. With `angular` (unlike with standard AJAX applications) you don't 
need to write additional listeners or DOM manipulators, because they are built-in. 
This feature makes your application logic very easy to write, test, maintain, and 
understand.

## Scope

The Model consists of one or more JavaScript objects, arrays, or primitive types.
These are referenced from the scope.  There are no restrictions on what the Model 
can be or what structure it should have. The only requirement is that it is 
referenced by the scope.

The following illustration shows the parts of an `angular` application and how they 
work together:

<img class="left" src="img/angular_parts.png" border="0" />

In addition, `angular` comes with a set of Services, which have the following 
properties:

* The services provided are very useful for building web applications.
* You can extend and add application-specific behavior to services.
* Services include Dependency-Injection, XHR, caching, URL routing, 
  and browser abstraction.

# Where To Go Next

* For additional hands-on examples of using `angular`, including more source 
  code that you can copy and paste into your own pages, take a look through 
  the `angular` {@link cookbook Cookbook}.

* For explanations of the `angular` concepts presented in the examples on this 
  page, see the {@link guide Developer Guide}.