AngularJS is a JavaScript-based open-source front-end web framework mainly maintained by Google and by a community of individuals and corporations to address many of the challenges encountered in developing single-page applications. It aims to simplify both the development and the testing of such applications by providing a framework for client-side model–view–controller (MVC) and model–view–viewmodel (MVVM) architectures, along with components commonly used in rich Internet applications. (This flexibility has led to the acronym MVW, which stands for "model-view-whatever" and may also encompass model–view–presenter and model–view–adapter.) In 2014, the original AngularJS team began working on the Angular web framework.

The AngularJS framework works by first reading the Hypertext Markup Language (HTML) page, which has additional custom HTML attributes embedded into it. Angular interprets those attributes as directives to bind input or output parts of the page to a model that is represented by standard JavaScript variables. The values of those JavaScript variables can be manually set within the code, or retrieved from static or dynamic JSON resources.

According to JavaScript analytics service Libscore, AngularJS is used on the websites of Wolfram Alpha, NBC, Walgreens, Intel, Sprint, ABC News, and about 12,000 other sites out of 1 million tested in October 2016.[3] AngularJS is currently in the top 100 of the most starred projects on GitHub.[4]

AngularJS is the frontend part of the MEAN stack, consisting of MongoDB database, Express.js web application server framework, Angular.js itself, and Node.js server runtime environment.

AngularJS logo
Initial releaseOctober 20, 2010[1]
Stable release
1.7.8 / March 11, 2019[2]
Written inJavascript
PlatformJavaScript engine
Size167 kB production
1.2 MB development
TypeWeb framework
LicenseMIT License


AngularJS is built on the belief that declarative programming should be used to create user interfaces and connect software components, while imperative programming is better suited to defining an application's business logic.[5] The framework adapts and extends traditional HTML to present dynamic content through two-way data-binding that allows for the automatic synchronization of models and views. As a result, AngularJS de-emphasizes explicit Document Object Model (DOM) manipulation with the goal of improving testability and performance.

AngularJS's design goals include:

  • to decouple DOM manipulation from application logic. The difficulty of this is dramatically affected by the way the code is structured.
  • to decouple the client side of an application from the server side. This allows development work to progress in parallel, and allows for reuse of both sides.
  • to provide structure for the journey of building an application: from designing the UI, through writing the business logic, to testing.

AngularJS implements the MVC pattern to separate presentation, data, and logic components.[6] Using dependency injection, Angular brings traditionally server-side services, such as view-dependent controllers, to client-side web applications. Consequently, much of the burden on the server can be reduced.


AngularJS uses the term "scope" in a manner akin to the fundamentals of computer science.

Scope in computer science describes when in the program a particular binding is valid. The ECMA-262 specification defines scope as: a lexical environment in which a Function object is executed in client-side web scripts;[7] akin to how scope is defined in lambda calculus.[8]

As a part of the "MVC" architecture, the scope forms the "Model", and all variables defined in the scope can be accessed by the "View" as well as the "Controller". The scope behaves as a glue and binds the "View" and the "Controller".

In AngularJS, "scope" is a certain kind of object[9] that itself can be in scope or out of scope in any given part of the program, following the usual rules of variable scope in JavaScript like any other object.[10] When the term "scope" is used below, it refers to the Angular scope object and not the scope of a name binding.


The task performed by the AngularJS bootstrapper occur in three phases[11] after the DOM has been loaded:

  1. Creation of a new Injector
  2. Compilation of the directives that decorate the DOM
  3. Linking of all directives to scope

AngularJS directives allow the developer to specify custom and reusable HTML-like elements and attributes that define data bindings and the behavior of presentation components. Some of the most commonly used directives are:

A module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.

Since ng-* attributes are not valid in HTML specifications, data-ng-* can also be used as a prefix. For example, both ng-app and data-ng-app are valid in AngularJS.

Declares the root element of an AngularJS application, under which directives can be used to declare bindings and define behavior.
A module for accessibility support of common ARIA attributes.
Sets the text of a DOM element to the value of an expression. For example, <span ng-bind="name"></span> displays the value of ‘name’ inside the span element. Any change to the variable ‘name’ in the application's scope reflect instantly in the DOM.
Conditionally apply a class, depending on the value of a boolean expression.
Specifies a JavaScript controller class that evaluates HTML expressions.
Basic if statement directive that instantiates the following element if the conditions are true. When the condition is false, the element is removed from the DOM. When true, a clone of the compiled element is re-inserted.
Called once when the element is initialized.
Similar to ng-bind, but establishes a two-way data binding between the view and the scope.
Provides tuning for how model updates are done.
Instantiate an element once per item from a collection.
ng-show & ng-hide
Conditionally show or hide an element, depending on the value of a boolean expression. Show and hide is achieved by setting the CSS display style.
Conditionally instantiate one template from a set of choices, depending on the value of a selection expression.
The base directive responsible for handling routes[12] that resolve JSON before rendering templates driven by specified controllers.

Two-way data binding

AngularJS two-way data binding is its most notable feature, largely relieving the server backend of templating responsibilities. Instead, templates are rendered in plain HTML according to data contained in a scope defined in the model. The $scope service in Angular detects changes to the model section and modifies HTML expressions in the view via a controller. Likewise, any alterations to the view are reflected in the model. This circumvents the need to actively manipulate the DOM and encourages bootstrapping and rapid prototyping of web applications.[13] AngularJS detects changes in models by comparing the current values with values stored earlier in a process of dirty-checking, unlike Ember.js and Backbone.js that trigger listeners when the model values are changed.[14]

is angular method, for dirty checking. Any variable or expression assigned in $scope automatically sets up a $watchExpression in angular. So assigning a variable to $scope or using directives like ng-if, ng-show, ng-repeat etc. all create watches in angular scope automatically. Angular maintains a simple array of $$watchers in the $scope objects
Different ways of defining a watcher in AngularJS.
  • explicitly $watch an attribute on $scope.
    $scope.$watch('person.username', validateUnique);
  • place an interpolation in your template (a watcher will be created for you on the current $scope).
  • ask a directive such as ng-model to define the watcher for you.
    <input ng-model="person.username" />
is angular method, which is invoked internally by angularjs in frequent intervals. In $digest method, angular iterates over all $watches in its scope/child scopes.
is an angular method, internally invokes $digest. This method is used when you want to tell angular manually start dirty checking (execute all $watches)
is both a method and event in angularjs. $destroy() method, removes a scope and all its children from dirty checking. $destroy event is called by angular whenever a $scope or $controller is destroyed.

Development history

AngularJS was originally developed in 2009 by Miško Hevery[15] at Brat Tech LLC[16] as the software behind an online JSON storage service, that would have been priced by the megabyte, for easy-to-make applications for the enterprise. This venture was located at the web domain "",[16] and had a few subscribers, before the two decided to abandon the business idea and release Angular as an open-source library.

The 1.6 release added many of the concepts of Angular to AngularJS, including the concept of a component-based application architecture.[17] This release among others removed the Sandbox, which many developers believed provided additional security, despite numerous vulnerabilities that had been discovered that bypassed the sandbox.[18] The current (as of June 2018) stable release of AngularJS is 1.7.0[19]

In January 2018, a schedule was announced for phasing-out AngularJS: after releasing 1.7.0, the active development on AngularJS will continue till June 30, 2018. Afterwards, 1.7 will be supported till  June 30, 2021 as long-term support.[20]

Legacy browser support

Versions 1.3 and later of AngularJS do not support Internet Explorer 8 or earlier. While AngularJS 1.2 supports IE8, its team does not.[21][22]

Angular and AngularDart

Subsequent versions of AngularJS are simply called Angular. Angular is an incompatible TypeScript-based rewrite of AngularJS. Angular 4 was announced on 13 December 2016, skipping 3 to avoid a confusion due to the misalignment of the router package's version which was already distributed as v3.3.0.[23]

AngularDart works on Dart, which is an object-oriented, class defined, single inheritance programming language using C# style syntax, that is different from Angular JS (which uses JavaScript) and Angular 2/ Angular 4 (which uses TypeScript). Angular 4 released in March 2017, with the framework's version aligned with the version number of the router it used. Angular 5 was released on November 1, 2017.[24] Key improvements in Angular 5 include support for progressive Web apps, a build optimizer and improvements related to Material Design.[25] Angular 6 was released on 3rd May 2018[26], Angular 7 was released on 18th October 2018, and Angular 8 is due to be released around March/April 2019. Angular follows Semantic Versioning standards, with each major version number indicating potentially breaking changes. Angular has pledged to provide 6 months of active support for each major version followed by 12 months of long term support. Major releases are bi-yearly with 1 to 3 minor releases for every major release.[27]

Angular Universal

A normal Angular application executes in the browser, while Angular Universal generates static application pages on the server through server-side rendering (SSR).[28]

Chrome extension

In July 2012, the Angular team built an extension for the Google Chrome browser called Batarang,[29] that improves the debugging experience for web applications built with Angular. The extension aims to allow for easy detection of performance bottlenecks and offers a GUI for debugging applications.[30] For a time during late 2014 and early 2015, the extension was not compatible with recent releases (after v1.2.x) of Angular.[31] The last update made to this extension was on April 4, 2017.


AngularJS sets out the paradigm of a digest cycle. This cycle can be considered a loop, during which AngularJS checks if there is any change to all the variables watched by all the $scopes. If $scope.myVar is defined in a controller and this variable was marked for watching, Angular will monitor the changes on myVar in each loop iteration.

This approach potentially leads to slow rendering when AngularJS checks on too many variables in the $scope every cycle. Miško Hevery suggests keeping fewer than 2000 watchers on any page.[14]

See also


  1. ^ Earliest known releases
  2. ^ "Releases". GitHub.
  3. ^ "Libscore". Retrieved 2016-10-17.
  4. ^ "GitHub search results sorted by number of stars".
  5. ^ "What Is Angular?". Retrieved 12 February 2013.
  6. ^ Understanding Components
  7. ^ "Annotated ECMAScript 5.1, Section 10.2 Lexical Environments". Retrieved 2015-01-03.
  8. ^ Barendregt, Henk; Barendsen, Erik (March 2000), Introduction to Lambda Calculus (PDF)
  9. ^ "AngularJS: Developer Guide: Scopes". Retrieved 2015-01-03.
  10. ^ "ECMA-262-3 in detail. Chapter 4. Scope chain". Retrieved 2015-01-03.
  11. ^ "Writing Directives". November 28, 2012. Retrieved 2013-07-21.
  12. ^ Component Router
  13. ^ "5 Awesome AngularJS Features". Retrieved 13 February 2013.
  14. ^ a b Misko Hevery. "Databinding in angularjs". Retrieved 2014-03-09.
  15. ^ "Hello World, <angular/> is here". Retrieved 2014-10-12.
  16. ^ a b "GetAngular". Angular / BRAT Tech. LLC. Archived from the original on 2010-04-13. Retrieved 2014-10-12.
  17. ^ "AngularJS: Developer Guide for v1.5.8: Components". Google. Retrieved 2017-09-26.
  18. ^ "angular.js/". GitHub. Retrieved 2017-09-26.
  19. ^ "Github Release 1.7.0".
  20. ^ "Stable AngularJS and Long Term Support". Angular Blog. 2018-01-26. Retrieved 2018-03-16.
  21. ^ "Internet Explorer Compatibility". Angular JS 1.7.7 Developer Guide. Google. Retrieved 12 Feb 2019. AngularJS 1.3 has dropped support for IE8. Read more about it on our blog. AngularJS 1.2 will continue to support IE8, but the core team does not plan to spend time addressing issues specific to IE8 or earlier.
  22. ^ Minar, Igor. "AngularJS 1.3: a new release approaches". AngularJS Blog. Retrieved 2014-10-12.
  23. ^ "Ok... let me explain: it's going to be Angular 4.0". Retrieved 2016-12-14.
  24. ^
  25. ^ "Angular 5 JavaScript framework delayed".
  26. ^ Fluin, Stephen (3 May 2018). "Version 6 of Angular Now Available – Angular Blog". Angular Blog. Retrieved 8 June 2018.
  27. ^ "Angular versioning and releases". Google. Retrieved 8 June 2018.
  28. ^ "Dynamic SSR & Static Pre-rendering".
  29. ^ "angular/angularjs-batarang (GitHub)". Retrieved 2014-10-12.
  30. ^ Ford, Brian. "Introducing the AngularJS Batarang". AngularJS Blog. Retrieved 2014-10-12.
  31. ^ "batarang Chrome extension for AngularJS appears broken".

Further reading

External links

Angular (web framework)

Angular (commonly referred to as "Angular 2+" or "Angular v2 and above") is a TypeScript-based open-source web application framework led by the Angular Team at Google and by a community of individuals and corporations. Angular is a complete rewrite from the same team that built AngularJS.


AtScript was a proposed JavaScript-based scripting language extending Microsoft's TypeScript and transcompiling to JavaScript. It was introduced in October 2014 at the ng-Europe conference by the developers of Google's AngularJS web development framework as the language that the upcoming Angular 2.0 would be built with.AtScript was originally intended to run on top of TypeScript, while including some features from Dart. In October 2014, Google announced that Angular 2.0 would be written in AtScript. In March 2015, Microsoft announced that many of AtScript's features would be implemented in the TypeScript 1.5 release, and that Angular 2.0 would be built on pure TypeScript.The name “AtScript” comes from the @ “at” symbol used for annotations in many languages.


Backbone.js is a JavaScript library with a RESTful JSON interface and is based on the Model–view–presenter (MVP) application design paradigm. Backbone is known for being lightweight, as its only hard dependency is on one JavaScript library, Underscore.js, plus jQuery for use of the full library. It is designed for developing single-page web applications, and for keeping various parts of web applications (e.g. multiple clients and the server) synchronized. Backbone was created by Jeremy Ashkenas, who is also known for CoffeeScript and Underscore.js.When handling the DOM Backbone.js adopts an imperative programming style, in contrast with a declarative programming style (common in AngularJS using data-attributes).Trying to provide "the minimal set of data-structuring (models and collections) and user interface (views and URLs)", leaves to the developer the choice of extensions for enhanced functionality. For example, one can use nested views with Backbone Layout Manager or model-view binding with ReSTbasis.


Codecademy is an online interactive platform that offers free coding classes in 12 different programming languages including Python, Java, JavaScript (jQuery, AngularJS, React.js), Ruby, SQL, C++, and Sass, as well as markup languages HTML and CSS. The site also offers a paid "pro" option that gives users access to a personalized learning plan, quizzes, realistic projects, and live help from advisors.

Comparison of Material Design implementations

This page contains general information about Google's Material Design implementations.

Content Security Policy

Content Security Policy (CSP) is a computer security standard introduced to prevent cross-site scripting (XSS), clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context. It is a Candidate Recommendation of the W3C working group on Web Application Security, widely supported by modern web browsers. CSP provides a standard method for website owners to declare approved origins of content that browsers should be allowed to load on that website—covered types are JavaScript, CSS, HTML frames, web workers, fonts, images, embeddable objects such as Java applets, ActiveX, audio and video files, and other HTML5 features.

Dependency injection

In software engineering, dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object. A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it. The service is made part of the client's state. Passing the service to the client, rather than allowing a client to build or find the service, is the fundamental requirement of the pattern.

The intent behind dependency injection is to decouple objects to the extent that no client code has to be changed simply because an object it depends on needs to be changed to a different one. This permits following the Open / Closed principle.

Dependency injection is one form of the broader technique of inversion of control. As with other forms of inversion of control, dependency injection supports the dependency inversion principle. The client delegates the responsibility of providing its dependencies to external code (the injector). The client is not allowed to call the injector code; it is the injecting code that constructs the services and calls the client to inject them. This means the client code does not need to know about the injecting code, how to construct the services or even which actual services it is using; the client only needs to know about the intrinsic interfaces of the services because these define how the client may use the services. This separates the responsibilities of use and construction.

There are three common means for a client to accept a dependency injection: setter-, interface- and constructor-based injection. Setter and constructor injection differ mainly by when they can be used. Interface injection differs in that the dependency is given a chance to control its own injection. Each requires that separate construction code (the injector) takes responsibility for introducing a client and its dependencies to each other.


Express.js, or simply Express, is a web application framework for Node.js, released as free and open-source software under the MIT License. It is designed for building web applications and APIs. It has been called the de facto standard server framework for Node.js.The original author, TJ Holowaychuk, described it as a Sinatra-inspired server, meaning that it is relatively minimal with many features available as plugins. Express is the backend component of the MEAN stack, together with the MongoDB database software and AngularJS frontend framework.


JHipster is a free and open-source application generator used to quickly develop modern web applications and Microservices using Angular or React (JavaScript library) and the Spring Framework.

JavaScript framework

A JavaScript framework is an application framework written in JavaScript. It differs from a JavaScript library in its control flow: a library offers functions to be called by its parent code, whereas a framework defines the entire application design. A developer does not call a framework; instead it is the framework that will call and use the code in some particular way. Some JavaScript frameworks follow the model–view–controller paradigm designed to segregate a web application into orthogonal units to improve code quality and maintainability. Examples: AngularJS, Ember.js, Meteor.js.

JavaScript templating

JavaScript templating refers to the client side data binding method implemented with the JavaScript language. This approach became popular thanks to JavaScript's increased use, its increase in client processing capabilities, and the trend to outsource computations to the client's web browser. Popular JavaScript templating libraries are AngularJS, Backbone.js, Ember.js, Handlebars.js, Vue.js and Mustache.js. A frequent practice is to use double curly brackets (i.e. {{key}}) to call values of the given key from data files, often JSON objects.

List of JavaScript libraries

This is a list of notable JavaScript libraries.

MEAN (software bundle)

MEAN is a free and open-source JavaScript software stack for building dynamic web sites and web applications.The MEAN stack is MongoDB, Express.js, AngularJS (or Angular), and Node.js. Because all components of the MEAN stack support programs that are written in JavaScript, MEAN applications can be written in one language for both server-side and client-side execution environments.


TinyMCE is an online rich-text editor released as open-source software under the LGPL. It has the ability to convert HTML textarea fields or other HTML elements to editor instances. TinyMCE is designed to easily integrate with JavaScript libraries such as React (JavaScript library), Vue.js, and AngularJS as well as content management systems such as Joomla!, and WordPress.


In computer science, transclusion is the inclusion of part or all of an electronic document into one or more other documents by hypertext reference. Transclusion is usually performed when the referencing document is displayed, and is normally automatic and transparent to the end user. The result of transclusion is a single integrated document made of parts assembled dynamically from separate sources, possibly stored on different computers in disparate places.

Transclusion facilitates modular design: a resource is stored once and distributed for reuse in multiple documents. Updates or corrections to a resource are then reflected in any referencing documents. Ted Nelson coined the term for his 1980 nonlinear book Literary Machines, but the idea of master copy and occurrences was applied 17 years before, in Sketchpad.


W3Schools is an educational website for learning web technologies online. Content includes tutorials and references relating to HTML, CSS, JavaScript,JSON, PHP, Python, AngularJS, SQL, Bootstrap, Node.js, jQuery, XQuery, AJAX,XML,and recently they included Java also.

Created in 1998, its name is derived from the World Wide Web, but is not affiliated with the W3C (World Wide Web Consortium). It is run by Refsnes Data in Norway. W3Schools presents thousands of code examples. By using the TryIt editor, readers can edit examples and execute the code in a sandbox.

Wakanda (software)

Wakanda is a JavaScript platform to develop and run web or mobile apps.

It is based on open standards technologies including AngularJS, Ionic, Node.js, and TypeScript, and is supported on Linux (deployment only), Microsoft Windows, and macOS (Studio development).


WaveMaker is a private aPaaS (application platform-as-a-service) software for building and running custom apps. WaveMaker provides Rapid API App Development & Deployment to build enterprise-grade multi-device apps, and leverages Docker containerization for an app-optimized infrastructure.

Web developer

A web developer is a programmer who specializes in, or is specifically engaged in, the development of World Wide Web applications, or applications that are run over HTTP : CSS OR HTML from a web server to a web browser.

Basic frameworks
Site-specific browsers
Common Lisp
Other languages

This page is based on a Wikipedia article written by authors (here).
Text is available under the CC BY-SA 3.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.