All Versions
Latest Version
Avg Release Cycle
61 days
Latest Release
714 days ago

Changelog History
Page 5

  • v1.5.0-rc.2 Changes

    January 28, 2016

    ๐Ÿ—„ Deprecation Warning

    • ๐Ÿ‘€ The ngTouch module's ngClick directive has been deprecated and disabled by default. See the breaking ๐Ÿ”„ changes section for more information
    • ๐Ÿšš The angular.lowercase and angular.uppercase functions have been deprecated and will be removed ๐ŸŒ in version 1.7.0. It is recommended to use String.prototype.toLowerCase and String.prototype.toUpperCase functions instead.

    ๐Ÿ› Bug Fixes

    ๐Ÿ”‹ Features

    • $compile:
      • allow required controllers to be bound to the directive controller (56c3666f, #6040, #5893, #13763)
      • allow directive definition property require to be an object (cd21216f, #8401, #13763)
      • call $onInit on directive controllers after all sibling controllers have been constructed (3ffdf380, #13763)
    • $locale: include original locale ID in $locale (63492a02, #13390)
    • $resource: add support for timeout in cancellable actions (d641901b, #13824)

    ๐ŸŽ Performance Improvements

    • $compile: avoid needless overhead when wrapping text nodes (92e4801d)
    • ngAnimate: speed up areAnimationsAllowed check (683bd92f)

    ๐Ÿ’ฅ Breaking Changes

    ๐Ÿšš The $sanitize service will now remove instances of the usemap attribute from any elements passed to it.

    This attribute is used to reference another element by name or id. Since the name and id attributes are already blacklisted, a sanitized usemap attribute could only reference unsanitized ๐Ÿ”’ content, which is a security risk.

    ๐Ÿ—„ The ngClick override directive from the ngTouch module is deprecated and disabled by default. This means that on touch-based devices, users might now experience a 300ms delay before a click event is fired.

    If you rely on this directive, you can still enable it with the $touchProvider.ngClickOverrideEnabled()method:

    angular.module('myApp').config(function($touchProvider) {

    Going forward, we recommend using FastClick or perhaps one of the Angular 3rd party touch-related modules that provide similar functionality.

    ๐Ÿšš Also note that modern browsers already remove the 300ms delay under some circumstances:

    • ๐Ÿšš Chrome and Firefox for Android remove the 300ms delay when the well-known <meta name="viewport" content="width=device-width"> is set
    • ๐Ÿšš Internet Explorer removes the delay when touch-action css property is set to none or manipulation
    • ๐Ÿšš Since iOs 8, Safari removes the delay on so-called "slow taps"

    ๐Ÿ‘€ See this article by Telerik for more info on the topic.

    Note that this change does not affect the ngSwipe directive.

  • v1.5.0-rc.1 Changes

    January 15, 2016

    ๐Ÿ”‹ Features

    ๐Ÿ› Bug Fixes

    ๐Ÿ’ฅ Breaking Changes

    • $component: โšก๏ธ These breaking changes affect only applications updating from previous 1.5 beta / rc versions

      • Due to d91cf167, 0๏ธโƒฃ the default controllerAs value for components is now $ctrl (previously the name of the component was used). To migrate, either set controllerAs to the component name, or change the property name in your templates to $ctrl
      • Due to 25bc5318, it is no longer possible to set the restrict option on directives created via the module.component() helper. All components are now element directives (restrict: 'E'). If you need a directive that is not an element then you must use the module.directive() helper instead.
      • Due to f31c5a39, components are now always created with scope: {} (isolate scope). Previously, it was also possible to create components ๐Ÿ”ง with scope: true or scope: false. If your components rely on this scope configuration, you will have to create a regular directive instead.
      • Due to 6a47c0d7, 0๏ธโƒฃ the transclude property is now false by default (previously true). If you created components that expected transclusion then you must change your code to specify transclude: true.
    • ๐Ÿ”— linky: due to 98c2db7f,

    Before this change, the filter assumed that the input (if not undefined/null) was of type 'string' and that certain methods (such as .match()) would be available on it. Passing a non-string value would most likely result in a not-very-useful error being thrown (trying to call a method that does not exist) or in unexpected behavior (if the input happened to have the assumed methods).

    After this change, a proper (informative) error will be thrown. If you want to pass non-string values through linky, you need to explicitly convert them to strings first. Since input values could be initialized asynchronously, undefined or null will still be returned unchanged (without throwing an error).

  • v1.5.0-rc.0 Changes

    December 09, 2015

    ๐Ÿš€ This is the first Release Candidate for AngularJS 1.5.0. Please try upgrading your applications and report any regressions or other issues you find as soon as possible.

    ๐Ÿ”‹ Features

    • ๐Ÿ“œ $parse: provide a mechanism to access the locals object, $locals (0ea53503)
    • $resource: add proper support for cancelling requests, $cancelRequest() (98528be3, #9332, #13050, #13058, #13210)
    • ngAnimate: provide ng-[event]-prepare class for structural animations (6e18b50a)
    • ngLocale: add support for standalone months (96c73a06, #3744, #10247, #12642, #12844)
    • ngMock: destroy $rootScope after each test (b75c0d8d, #13433)
    • ngTransclude: don't overwrite the contents with an unfilled optional slot (0812af49, #13426)
    • ngView: reference resolved locals in scope, resolveAs: '$resolve' (983b0598, #13400)

    ๐Ÿ› Bug Fixes

    ๐Ÿ’ฅ Breaking Changes

    This is only a breaking change to a feature that was added in beta 2. If you have not started using multi-slot transclusion then this will not affect you.

    The keys and values for the transclude map of the directive definition have been swapped around to be more consistent with the other maps, such as scope and bindToController.

    Now the key is the slot name and the value is a normalized element selector.

    ๐ŸŒฒ Using a promise as timeout is no longer supported and will log a โš  warning. It never worked the way it was supposed to anyway.


    var deferred = $q.defer();
    var User = $resource('/api/user/:id', {id: '@id'}, {
      get: {method: 'GET', timeout: deferred.promise}
    var user = User.get({id: 1});   // sends a request
    deferred.resolve();             // aborts the request
    // Now, we need to re-define `User` passing a new promise as `timeout`
    // or else all subsequent requests from `someAction` will be aborted
    User = $resource(...);
    user = User.get({id: 2});


    var User = $resource('/api/user/:id', {id: '@id'}, {
      get: {method: 'GET', cancellable: true}
    var user = User.get({id: 1});   // sends a request
    user.$cancelRequest();      // aborts the request
    user = User.get({id: 2});

    ๐Ÿšš The $sanitize service will now remove instances of the <use> tag from the content passed to it.

    ๐Ÿ”’ This element is used to import external SVG resources, which is a security risk as the $sanitize service does not have access to the resource in order to sanitize it.

    0๏ธโƒฃ A new property to access route resolves is now available on the scope of the route. The default name for this property is $resolve. If your scope already contains a property with this name then it will be hidden or overwritten.

    In this case, you should choose a custom name for this property, that does not collide with other properties on the scope, by specifying the resolveAs property on the route.

    A new property to access all the locals for an expression is now available on the scope. This property is $locals.

    • If scope.$locals already exists, the way to reference this property is now this.$locals.
    • If the locals themselves include a property $locals then the way to reference that is now $locals.$locals.
  • v1.5.0-beta.2 Changes

    November 17, 2015

    ๐Ÿ› Bug Fixes

    ๐Ÿ”‹ Features

    ๐ŸŽ Performance Improvements

    • $compile: use static jquery data method to avoid creating new instances (9b90c32f)
    • $interpolate: provide a simplified result for constant expressions (cf83b4f4)
    • copy:
      • avoid regex in isTypedArray (c8768d12)
      • only validate/clear if the user specifies a destination (33c67ce7, #12068)
    • ๐Ÿ”€ merge: remove unnecessary wrapping of jqLite element (4daafd3d, #13236)

    ๐Ÿ’ฅ Breaking Changes

    ngMessage is now compiled with a priority of 1, which means directives on the same element as ngMessage with a priority lower than 1 will be applied when ngMessage calls the $transclude function. Previously, they were applied during the initial compile phase and were passed the comment element created by the transclusion of ngMessage. โช To restore this behavior, custom directives need to have their priority increased to at least "1".

    Previously, an non array-like input would pass through the orderBy filter unchanged. Now, an error is thrown. This can be worked around by converting an object to an array, either manually or using a filter such as (null and undefined still pass through without an error, in order to ๐Ÿ‘Œ support asynchronous loading of resources.)

  • v1.5.0-beta.1 Changes

    September 29, 2015

    ๐Ÿ› Bug Fixes

    ๐Ÿ”‹ Features

    ๐ŸŽ Performance Improvements

    ๐Ÿ’ฅ Breaking Changes

    • $sanitize: due to 181fc567, The svg support in is now an opt-in option

    Applications that depend on this option can use to turn the option back on, ๐Ÿ“š but while doing so, please read the warning provided in the documentation for information on preventing click-hijacking attacks when this option is turned on.

    If your data contains falsy values ('', 0, false and null) for option groups, then these options will now be placed into option groups. Previously all of these falsy values were treated as the option not being a member of a group.

    Only option groups that are undefined will result in the option being put in no group. If you have data that contains falsy values that should not be used as groups then you must filter the values before passing them to ngOptions converting falsy values to undefined.

    ngOptions will now throw if ngModel is not present on the select element. Previously, having no ngModel let ngOptions silently fail, which could lead to hard to debug errors. The change should therefore not affect any applications, as it simply makes the requirement more strict and alerts the developer explicitly.

  • v1.5.0-beta.0 Changes

    September 17, 2015

    ๐Ÿ› Bug Fixes

    • jqLite:: properly handle dash-delimited node names in jqLiteBuildFragment (cdd1227a3, #10617)
  • v1.4.13 Changes

    October 10, 2016

    ๐Ÿ› Bug Fixes

    • input: ensure that hidden input values are correct after history back (693d1334
  • v1.4.12 Changes

    June 15, 2016

    ๐Ÿ“š This release contains only documentation updates. Specifically, it restores the old (deprecated) ๐Ÿ”– version of the tutorial on the 1.4.x branch. If someone needs a version of the tutorial that is ๐Ÿ“„ compatible with v1.4, they can find it at

    โœ… As always, the latest and greatest version of the tutorial can be found on the master branch ๐Ÿ“„ (at We strongly recommend using this version as it is kept up-to-date, showcases several new features introduced in v1.5 or later and follows modern best practices.

  • v1.4.11 Changes

    May 27, 2016

    ๐Ÿ› Bug Fixes

    ๐ŸŽ Performance Improvements

    • $compile: use createMap() for directive bindings to allow fast forEach (832b383c, #12529)
  • v1.4.10 Changes

    March 16, 2016

    ๐Ÿ› Bug Fixes

    • core: only call console.log when window.console exists (beb00e44, #14006, #14007, #14047)
    • $animateCss: cancel fallback timeout when animation ends normally (a60bbc12, #13787)
    • $compile:
      • allow directives to have decorators (77cdc37c)
      • properly denormalize templates when only one of the start/end symbols is different (2d44a681, #13848)
      • handle boolean attributes in @ bindings (2ffbfb0a, #13767, #13769)
    • ๐Ÿ“œ $parse:
      • prevent assignment on constructor properties (f47e2180, #13417)
      • preserve expensive checks when running $eval inside an expression (96d62cc0)
      • copy inputs for expressions with expensive checks (0b7fff30)
    • $rootScope: set no context when calling helper functions for $watch (ab5c7698)
    • $route: allow preventing a route reload (4bc30314, #9824, #13894)
    • $routeProvider: properly handle optional eager path named groups (6a4403a1, #14011)
    • copy: add support for copying Blob objects (863a4232, #9669, #14064)
    • dateFilter: follow the CLDR on pattern escape sequences (f476060d, #12839)
    • dateFilter, input: fix Date parsing in IE/Edge when timezone offset contains : (571afd65, #13880, #13887)
    • input: re-validate when partially editing date-family inputs (02929f82, #12207, #13886)
    • select: handle corner case of adding options via a custom directive (df6e7315, #13874, #13878)
    • ngOptions: always set the 'selected' attribute for selected options (f87e8288, #14115)
    • ngAnimate: properly cancel previously running class-based animations (3b27dd37, #10156, #13822)
    • ngAnimateChildren: make it compatible with ngIf (dc158e7e, #13865, #13876)
    • ngMockE2E: pass responseType to $delegate when using passThrough (947cb4d1, #5415, #5783)

    ๐Ÿ”‹ Features

    • $locale: Include original locale ID in $locale (e69f3550, #13390)
    • ngAnimate: provide ng-[event]-prepare class for structural animations (796f7ab4)

    ๐ŸŽ Performance Improvements

    • $compile: avoid needless overhead when wrapping text nodes (946d9ae9)
    • ngRepeat: avoid duplicate jqLite wrappers (d04c38c4)
    • ngAnimate:
      • avoid jqLite/jQuery for upward DOM traversal (ab95ba65)
      • avoid $ overhead with jQuery (86416bcb)