AngularJS - HTML enhanced for web apps!
Clone or download
gkalpak fix(ngClass): do not break on invalid values
Previously, when an `ngClass` expression evaluated to something that was
not a string, array or object (and was truthy), an error would be thrown
while trying to call `.split()` on a non-string value. This error was
not very helpful for the user to identify the root cause of the problem.

This commit fixes it by ensuring such values are converted to string.

Fixes #16697

Closes #16699
Latest commit 26ddc5f Sep 19, 2018
Permalink
Failed to load latest commit information.
.github docs(PULL_REQUEST_TEMPLATE.md): fix broken links in PR template Dec 19, 2017
benchmarks chore(benchpress): add ngRepeat animation benchmark Jun 25, 2018
css style(css) separate selectors and declarations by new lines Jul 19, 2017
docs docs(*): update LTS information in `README.md` and docs landing page Sep 10, 2018
i18n chore(i18n): update CLDR to v30.0.1 Jun 6, 2017
images docs(*): optimize images Sep 21, 2017
lib chore(saucelabs): upgrade `sauce-connect` to latest version Jul 21, 2018
logs creating logs/ and tmp/ dirs Oct 29, 2010
scripts chore(code.angularjs.org): fix directory list paging Jun 14, 2018
src fix(ngClass): do not break on invalid values Sep 20, 2018
test fix(ngClass): do not break on invalid values Sep 20, 2018
vendor docs(vendor): add readme Jan 8, 2018
.editorconfig docs(.editorconfig): change link to use https Jun 4, 2018
.eslintignore chore(*): get rid of Bower in favor of Yarn aliases & checked-in pack… Jan 8, 2018
.eslintrc-base.json chore(eslint): enable `quotes: ["error", "single"]` Aug 10, 2016
.eslintrc-browser.json chore(*): switch from JSHint/JSCS to ESLint Aug 5, 2016
.eslintrc-node.json chore(eslint): allow ES6 for node scripts Feb 12, 2018
.eslintrc-todo.json chore(eslint): enable `quotes: ["error", "single"]` Aug 10, 2016
.eslintrc.json chore(*): switch from JSHint/JSCS to ESLint Aug 5, 2016
.gitattributes chore(*): add .gitattributes with new lines configuration Dec 30, 2014
.gitignore chore(deploy): rename deploy folders Feb 12, 2018
.mailmap chore(*): normalize Vojta's email in .mailmap correctly Nov 22, 2017
.nvmrc build(*): update Node from 6 to 8, update Yarn Dec 7, 2017
.travis.yml chore(deploy): rename deploy folders Feb 12, 2018
CHANGELOG.md docs(changelog): add 1.7.4 release notes Sep 7, 2018
CODE_OF_CONDUCT.md docs(*): add CODE_OF_CONDUCT.md Feb 15, 2018
CONTRIBUTING.md docs(*): remove usage of global grunt-cli Nov 11, 2017
DEVELOPERS.md chore(node): add karma launchers for Edge, IE, and Safari Jan 15, 2018
Gruntfile.js chore(docs.angularjs.org): only deploy production index.html as entry… Mar 1, 2018
LICENSE chore(*): update copyright year Jan 5, 2018
README.closure.md docs(*): ensure naming is correct for Angular(JS) versions Jan 25, 2017
README.md docs(*): update LTS information in `README.md` and docs landing page Sep 10, 2018
TRIAGING.md chore(*): get rid of Bower in favor of Yarn aliases & checked-in pack… Jan 8, 2018
angularFiles.js refactor($browser): share task-tracking code between `$browser` and `… Jul 13, 2018
karma-docs.conf.js refactor(jshint): reduce duplication & test all JS files Jul 8, 2014
karma-jqlite.conf.js test(jqLite): make iframe contents() test less flaky Jul 16, 2014
karma-jquery-2.1.conf.js test(jQuery): Run tests with jQuery 3 Jul 13, 2016
karma-jquery-2.2.conf.js test(jQuery): Run tests with jQuery 3 Jul 13, 2016
karma-jquery.conf-factory.js chore(*): switch from JSHint/JSCS to ESLint Aug 5, 2016
karma-jquery.conf.js test(jQuery): Run tests with jQuery 3 Jul 13, 2016
karma-modules.conf.js fix(modules): allow modules to be loaded in any order when using `ang… Jun 17, 2016
karma-shared.conf.js chore: try ios 11.2 May 25, 2018
package.json chore(doc-gen): upgrade `dgeni-packages` to 0.26.5 Aug 23, 2018
protractor-conf.js chore(travis): use Firefox 47 Jul 22, 2016
protractor-jenkins-conf.js chore(Jenkins): fix e2e tests on Jenkins Jul 11, 2016
protractor-shared-conf.js chore(travis): use Firefox 47 Jul 22, 2016
protractor-travis-conf.js docs(*): ensure naming is correct for Angular(JS) versions Jan 25, 2017
yarn.lock chore(doc-gen): upgrade `dgeni-packages` to 0.26.5 Aug 23, 2018

README.md

AngularJS Build Status

AngularJS lets you write client-side web applications as if you had a smarter browser. It lets you use good old HTML (or HAML, Jade/Pug and friends!) as your template language and lets you extend HTML’s syntax to express your application’s components clearly and succinctly. It automatically synchronizes data from your UI (view) with your JavaScript objects (model) through 2-way data binding. To help you structure your application better and make it easy to test, AngularJS teaches the browser how to do dependency injection and inversion of control.

It also helps with server-side communication, taming async callbacks with promises and deferred objects, and it makes client-side navigation and deep linking with hashbang urls or HTML5 pushState a piece of cake. Best of all? It makes development fun!


On July 1, 2018 AngularJS entered a 3 year Long Term Support period: Find out more

Looking for the new Angular? Go here: https://github.com/angular/angular


Documentation

Go to https://docs.angularjs.org

Contribute

We've set up a separate document for our contribution guidelines.

Develop

We've set up a separate document for developers.

Analytics

What to use AngularJS for and when to use it

AngularJS is the next generation framework where each component is designed to work with every other component in an interconnected way like a well-oiled machine. AngularJS is JavaScript MVC made easy and done right. (Well it is not really MVC, read on, to understand what this means.)

MVC, no, MV* done the right way!

MVC, short for Model-View-Controller, is a design pattern, i.e. how the code should be organized and how the different parts of an application separated for proper readability and debugging. Model is the data and the database. View is the user interface and what the user sees. Controller is the main link between Model and View. These are the three pillars of major programming frameworks present on the market today. On the other hand AngularJS works on MV*, short for Model-View-Whatever. The Whatever is AngularJS's way of telling that you may create any kind of linking between the Model and the View here.

Unlike other frameworks in any programming language, where MVC, the three separate components, each one has to be written and then connected by the programmer, AngularJS helps the programmer by asking him/her to just create these and everything else will be taken care of by AngularJS.

Interconnection with HTML at the root level

AngularJS uses HTML to define the user's interface. AngularJS also enables the programmer to write new HTML tags (AngularJS Directives) and increase the readability and understandability of the HTML code. Directives are AngularJS’s way of bringing additional functionality to HTML. Directives achieve this by enabling us to invent our own HTML elements. This also helps in making the code DRY (Don't Repeat Yourself), which means once created, a new directive can be used anywhere within the application.

HTML is also used to determine the wiring of the app. Special attributes in the HTML determine where to load the app, which components or controllers to use for each element, etc. We specify "what" gets loaded, but not "how". This declarative approach greatly simplifies app development in a sort of WYSIWYG way. Rather than spending time on how the program flows and orchestrating the various moving parts, we simply define what we want and AngularJS will take care of the dependencies.

Data Handling made simple

Data and Data Models in AngularJS are plain JavaScript objects and one can add and change properties directly on it and loop over objects and arrays at will.

Two-way Data Binding

One of AngularJS's strongest features. Two-way Data Binding means that if something changes in the Model, the change gets reflected in the View instantaneously, and the same happens the other way around. This is also referred to as Reactive Programming, i.e. suppose a = b + c is being programmed and after this, if the value of b and/or c is changed then the value of a will be automatically updated to reflect the change. AngularJS uses its "scopes" as a glue between the Model and View and makes these updates in one available for the other.

Less Written Code and Easily Maintainable Code

Everything in AngularJS is created to enable the programmer to end up writing less code that is easily maintainable and readable by any other new person on the team. Believe it or not, one can write a complete working two-way data binded application in less than 10 lines of code. Try and see for yourself!

Testing Ready

AngularJS has Dependency Injection, i.e. it takes care of providing all the necessary dependencies to its controllers and services whenever required. This helps in making the AngularJS code ready for unit testing by making use of mock dependencies created and injected. This makes AngularJS more modular and easily testable thus in turn helping a team create more robust applications.