Data Binding
Data-binding is an automatic way of updating the view whenever the model changes, as
well as updating the model whenever the view changes. This is awesome because it
eliminates DOM manipulation from the list of things you have to worry about.
Controller
Controllers are the behavior behind the DOM elements. AngularJS lets you express the
behavior in a clean readable form without the usual boilerplate of updating the DOM,
registering callbacks or watching model changes.
Plain JavaScript
Unlike other frameworks, there is no need to inherit from proprietary types in order to wrap the
model in accessors methods. AngularJS models are plain old JavaScript objects. This makes your code easy to
test, maintain, reuse, and again free from boilerplate.
Deep Linking
A deep link reflects where the user is in the app. This is useful so users can bookmark
and email links to locations within the app. Round trip apps get this automatically, but
AJAX apps by their nature do not. AngularJS combines the benefits of deep linking with
desktop app-like behavior.
Form Validation
Client-side form validation is an important part of a great user experience.
AngularJS lets you declare the validation rules of the form without having to write
JavaScript code. Write less code, go have beer sooner.
Server Communication
AngularJS provides built-in services on top of XHR as well as various other backends
using third party libraries. Promises further simplify your code
by handling asynchronous return of data. In this example, we use the AngularFire
library to wire up a Firebase backend to a simple AngularJS app.
Directives
Directives are a unique and powerful feature available in AngularJS. Directives let
you invent new HTML syntax, specific to your application.
Reusable Components
We use directives to create reusable components. A component allows you to hide complex
DOM structure, CSS, and behavior. This lets you focus either on what the application
does or how the application looks separately.
Localization
An important part of serious apps is localization. AngularJS's locale aware filters and
stemming directives give you building blocks to make your application available in all
locales.
Injectable
The dependency injection in AngularJS allows you to declaratively describe how your
application is wired. This means that your application needs no main()
method which is usually an unmaintainable mess. Dependency injection is also a core to
AngularJS. This means that any component which does not fit your needs can easily be
replaced.
Testable
AngularJS was designed from ground up to be testable. It encourages behavior-view
separation, comes pre-bundled with mocks, and takes full advantage of dependency
injection. It also comes with end-to-end scenario runner which eliminates test flakiness
by understanding the inner workings of AngularJS.