All Versions
206
Latest Version
Avg Release Cycle
61 days
Latest Release
1360 days ago

Changelog History
Page 11

  • v1.3.0-beta.6 Changes

    April 21, 2014

    ๐Ÿ› Bug Fixes

    • $animate: ensure class-based animations always perform a domOperation if skipped (708f2ba9, #6957)
    • $compile:
      • reference correct directive name in ctreq error (1192531e, #7062, #7067)
      • fix regression which affected old jQuery releases (ef64169d)
    • $location:
    • input: don't dirty model when input event triggered due to placeholder change (ff428e72, #2614, #5960)
    • limitTo: do not convert Infinity to NaN (5dee9e4a, #6771, #7118)
    • ngModelController: introduce $cancelUpdate to cancel pending updates (940fcb40, #6994, #7014)

    ๐Ÿ”‹ Features

    • $resource: Make stripping of trailing slashes configurable. (3878be52)
    • Scope: add $watchGroup method for observing a set of expressions (21f93163)
    • injector: "strict-DI" mode which disables "automatic" function annotation (4b1695ec, #6719, #6717, #4504, #6069, #3611)
    • ngModelOptions: custom triggers and debounce of ngModel updates (dbe381f2, #1285)

    ๐ŸŽ Performance Improvements

    • $compile: watch interpolated expressions individually (0ebfa0d1)
    • $interpolate: speed up interpolation by recreating watchGroup approach (546cb429)

    ๐Ÿ’ฅ Breaking Changes

    • $interpolate: due to 88c2193c, the function returned by $interpolate no longer has a .parts array set on it.

    Instead it has two arrays:

    • .expressions, an array of the expressions in the interpolated text. The expressions are parsed with $parse, with an extra layer converting them to strings when computed
    • .separators, an array of strings representing the separations between interpolations in the text. This array is always 1 item longer than the .expressions array for easy merging with it
  • v1.3.0-beta.5 Changes

    April 03, 2014

    ๐Ÿ› Bug Fixes

    • $animate:
      • insert elements at the start of the parent container instead of at the end (1cb8584e, #4934, #6275)
      • ensure the CSS driver properly works with SVG elements (c67bd69c, #6030)
    • ๐Ÿ“œ $parse: mark constant unary minus expressions as constant (7914d346, #6932)
    • Scope:
      • revert the __proto__ cleanup as that could cause regressions (71c11e96)
      • more scope clean up on $destroy to minimize leaks (d64d41ed, #6794, #6856, #6968)
    • ngClass: handle ngClassOdd/Even affecting the same classes (c9677920, #5271)

    ๐Ÿ’ฅ Breaking Changes

    • $animate: due to 1cb8584e, 0๏ธโƒฃ $animate will no longer default the after parameter to the last element of the parent container. Instead, when after is not specified, the new element will be inserted as the first child of the parent container.

    โšก๏ธ To update existing code, change all instances of $animate.enter() or $animate.move() from:

    $animate.enter(element, parent);

    to:

    $animate.enter(element, parent, angular.element(parent[0].lastChild));

  • v1.3.0-beta.4 Changes

    March 28, 2014

    ๐Ÿ› Bug Fixes

    • $animate:
      • prevent cancellation timestamp from being too far in the future (ff5cf736, #6748)
      • make CSS blocking optional for class-based animations (1bebe36a, #6674, #6739)
      • run CSS animations before JS animations to avoid style inheritance (2317af68, #6675)
    • Scope: aggressively clean up scope on $destroy to minimize leaks (f552f251, #6794, #6856)
    • doc-gen: Run Gulp on Windows too (47ba6014, #6346)
    • filter.ngdoc: Check if "input" variable is defined (4a6d4de5, #6819)
    • input: don't perform HTML5 validation on updated model-value (b472d027, #6796, #6806)

    ๐Ÿ”‹ Features

    ๐Ÿ’ฅ Breaking Changes

    Any class-based animation code that makes use of transitions ๐Ÿšš and uses the setup CSS classes (such as class-add and class-remove) must now provide a empty transition value to ensure that its styling is applied right away. In other words if your animation code is expecting any styling to be applied that is defined in the setup class then it will not be applied "instantly" unless a transition:0s none value is present in the styling for that CSS class. This situation is only the case if a transition is already present on the base CSS class once the animation kicks off.

    Before:

    .animated.my-class-add {
      opacity:0;
      transition:0.5s linear all;
    }
    .animated.my-class-add.my-class-add-active {
      opacity:1;
    }
    

    After:

    .animated.my-class-add {
      transition:0s linear all;
      opacity:0;
    }
    .animated.my-class-add.my-class-add-active {
      transition:0.5s linear all;
      opacity:1;
    }
    

    ๐Ÿ“š Please view the documentation for ngAnimate for more info.

  • v1.3.0-beta.3 Changes

    March 21, 2014

    ๐Ÿ› Bug Fixes

    • ngAnimate: support webkitCancelRequestAnimationFrame in addition to webkitCancelAnimationFrame (c839f78b, #6526)
    • $http: allow sending Blob data using $http (b8cc71d4, #5012)
    • $httpBackend: don't error when JSONP callback is called with no parameter (6680b7b9, #4987, #6735)
    • $rootScope: ng-repeat can't handle NaN values. #4605 (fb6062fb, #4605)
    • $rootScope: $watchCollection should call listener with old value (78057a94, #2621, #5661, #5688, #6736)
    • angular.bootstrap: allow angular to load only once (748a6c8d, #5863, #5587)
    • jqLite: inheritedData() now traverses Shadow DOM boundaries via the host property of DocumentFragment (8a96f317, #6637)
    • ngCookie: convert non-string values to string (36528310, #6151, #6220)
    • ngTouch: update workaround for Webkit quirk (bc42950b, #6302)
    • orderBy: support string predicates containing non-ident characters (37bc5ef4, #6143, #6144)
    • select: avoid checking option element's selected property in render (f40f54c6, #2448, #5994)

    ๐Ÿ”‹ Features

    • $compile: add support for $observer deregistration (299b220f, #5609)
    • ngMock.$httpBackend: added support for function as URL matcher (d6cfcace, #4580)

    ๐Ÿ’ฅ Breaking Changes

    • $compile: due to 299b220f, calling attr.$observe no longer returns the observer function, but a deregistration function instead. To migrate the code follow the example below:

    Before:

    directive('directiveName', function() {
      return {
        link: function(scope, elm, attr) {
          var observer = attr.$observe('someAttr', function(value) {
            console.log(value);
          });
        }
      };
    });
    

    After:

    directive('directiveName', function() {
      return {
        link: function(scope, elm, attr) {
          var observer = function(value) {
            console.log(value);
          };
    
          attr.$observe('someAttr', observer);
        }
      };
    });
    
    • $httpBackend: due to 6680b7b9, the JSONP behavior for erroneous and empty responses changed: Previously, a JSONP response was regarded as erroneous if it was empty. Now Angular is listening to the correct events to detect errors, i.e. even empty responses can be successful.
  • v1.3.0-beta.2 Changes

    March 14, 2014

    ๐Ÿ› Bug Fixes

    • $$rAF: always fallback to a $timeout in case native rAF isn't supported (7b5e0199, #6654)
    • $http: don't convert 0 status codes to 404 for non-file protocols (56e73ea3, #6074, #6155)
    • ngAnimate: setting classNameFilter disables animation inside ng-if (129e2e02, #6539)

    ๐Ÿ”‹ Features

    • whitelist blob urls for sanitization of data-bound image urls (47ab8df4, #4623)
  • v1.3.0-beta.19 Changes

    August 22, 2014

    ๐Ÿ› Bug Fixes

    • $compile:
      • use the correct namespace for transcluded SVG elements (ffbd276d, #8716)
      • update the jQuery .context when an element is replaced by replace:true directive (f02f7d9c, #8253, #7900)
    • $location:
      • rewrite relative URI correctly if path==='/' in legacy html5Mode (d18b2819, #8684)
      • don't call indexOf() of undefined href attribute (5b77e30c, #7721, #8681)
    • ๐Ÿ“œ $parse: remove unused variable declaration in generated getters (6acea115)
    • $sanitize: sanitize javascript urls with comments (b7e82a33, #8274)
    • $watchGroup: call listener once when the watchExpressions array is empty (bf0e8373)
    • Angular: make Date comparison in equals() NaN-aware (693e846a, #8650, #8715)
    • Scope: don't clear the phase when an exception is thrown from asyncQueue or watch (bf1a57ad)
    • copy: clear array destinations correctly for non-array sources (a603e202, #8610, #8702)
    • forEach: match behavior of Array.prototype.forEach (ignore missing properties) (36230194, #8510, #8522, #8525)
    • input:
      • use lowercase method to account for undefined type (066c0499)
      • by default, do not trim input[type=password] values (a7fb357f, #8250, #8230)
    • jQuery: cooperate with other libraries monkey-patching jQuery.cleanData (b9389b26, #8471)
    • jqLite:
    • ๐Ÿ”— linky: handle quotes around email addresses (a9d22712, #8520)
    • minErr: encode btstrpd error input to strip angle brackets (0872388a, #8683)
    • ngRepeat:
      • allow aliasAs identifiers which contain but do not match reserved words (d713ad1b, #8729)
      • make allowed aliasAs expressions more strict (09b29870, #8438, #8440)

    ๐Ÿ”‹ Features

    • $compile:
    • benchpress: configure benchpress grunt task (6bdaa4bc)
    • jqLite: implement the detach method (1a05daf5, #5461)
    • ngRoute: add method for changing url params (77a1acc7)

    ๐ŸŽ Performance Improvements

    • $compile:
      • don't register $destroy callbacks on element-transcluded nodes (b5f7970b)
      • refactor publicLinkFn to simplify the code and use 'for in' loop (645625cf)
      • clone the nodeList during linking only if necessary (3e0a2e1f)
      • delay object initialization in nodeLinkFn (31ed0af7)
      • optimize nodeLinkFn (35134a0e)
      • optimize publicLinkFn (274e9c4d)
    • $interpolate: do not keep empty separators (94b5c9f0)
    • ๐Ÿ“œ $parse:
      • don't bind filters to a context (8863b9d0)
      • optimize filter implementation (ece6ef47)
      • speed up fn invocation for no args case (a17578ad)
      • speed up fn invocation by optimizing arg collection (fecfc5b0)
      • use no-proto maps as caches and avoid hasOwnProperty checks (d302ea0c)
      • trim expression only if string (a1341223)
    • $rootScope: do not use Function::call when not needed (7eae29e5)
    • Scope:
      • optimize $watchCollection when used for watching objects (e822e906)
      • don't use forEach in (301463a2)
      • watchCollection optimization (7d96ab0d)
      • exit $broadcast early if nobody is listening for the given event (a09fa356)
      • use remove the need for the extra watch in $watchGroup (3f0e642e, #8396)
    • benchpress: add benchpress node module and port over large table test (1229334f)
    • isObject: use strict comparison (d208ba25)
    • jqLite:
      • simplify jqLiteDealoc (f8f7a1df)
      • optimize event handler (d05f27e2)
      • only take str.split() path when needed (187b1b8e, #8648)
      • optimize off() (abb17cce)
      • refactor jqLiteExpandoStore to minimize access to expensive element.ng339 expando property (1e8698b3)
      • microoptimization in chaining fn (fafbd494)
      • don't use String#split in on() unless we need it (bda673f8)
      • don't check isString many times in constructor (443b521e)
      • optimize jqLiteAcceptsData method (b493c62f)
      • optimize append() and after() (8d933bf9)
      • don't register DOM listener for $destroy event (6251751a)
      • optimize event listener registration (566f1015)
      • improve createEventHandler method by switching from forEach to for loop (e9cd6dc0)
      • don't use forEach in off() (960a8410)
      • don't recreate the Node.contains polyfill (d1536e7c)
      • speed up shallowCopy and special case Attributes cloning (54fa16e4)
    • ngBind: bypass jquery/jqlite when setting text (0a738ce1)
    • ngRepeat:
      • simplify code and remove duplicate array.length access (08eb0558)
      • optimize marking of nodes that are being removed via an animation (36e35b2c)
      • use no-proto objects for blockMaps (13d113c5)
      • move work to compile fn (bdd853cb)
      • move updateScope fn to factory and reuse it for all repeaters (e58d65a5)
      • clone boundary comment nodes (fbd48845)

    ๐Ÿ’ฅ Breaking Changes

    Now, ng-attr-* will never add the attribute to the DOM if any of the interpolated expressions evaluate to undefined.

    โ†ช To work around this, initialize values which are intended to be the empty string with the empty string:

    For example, given the following markup:

    <div ng-attr-style="border-radius: {{value}}{{units}}"></div>
    

    If $scope.value is 4, and $scope.units is undefined, the resulting markup is unchanged:

    <div ng-attr-style="border-radius: {{value}}{{units}}"></div>
    

    โšก๏ธ However, if $scope.units is "", then the resulting markup is updated:

    <div ng-attr-style="border-radius: {{value}}{{units}}" style="border-radius: 4"></div>
    

    Closes #8376 Closes #8399

    • due to 0d608d04, element-transcluded directives now have an extra comment automatically appended to their cloned DOM

    This comment is usually needed to keep track the end boundary in the event child directives modify the root node(s). If not used for this purpose it can be safely ignored.

    • due to 75c4cbf8, directive.type was renamed to directive.templateNamespace

    ๐Ÿš€ This change is breaking only within 1.3.0-beta releases: directive.type was renamed to directive.templateNamespace

    The property name type was too general.

    • ๐Ÿ“œ $parse: due to 8863b9d0, this in filters is now undefined and no longer the scope

    It's a bad practice for filters to have hidden dependencies, so pulling stuff from scope directly is not a good idea. Scope being the filter context was never documented as public API, so we don't expect that any significant code depends on this behavior.

    If an existing filter has a dependency on the scope instance, the scope reference can be passed into the filter as a filter argument (this is highly discouraged for new code):

    Before: {{ user.name | customFilter }} After: {{ user.name | customFilter:this }}

    • Scope: due to 0554c1aa, deregisterNotifier callback for $watch is no longer available

    This API was available only in the last few 1.3 beta versions and is not very useful for applications, so we don't expect that anyone will be affected by this change.

    • input: due to a7fb357f, by default, do not trim input[type=password] values.

    0๏ธโƒฃ Previously, input[type=password] would trim values by default, and would require an explicit ng-trim="false" to disable the trimming behavior. After this change, ng-trim no longer affects input[type=password], and will never trim the password value.

    Closes #8250 Closes #8230

  • v1.3.0-beta.18 Changes

    August 12, 2014

    ๐Ÿ› Bug Fixes

    • $compile: make '='-bindings NaN-aware (5038bf79, #8553, #8554)
    • $location: add semicolon to whitelist of delimiters to unencode (36258033, #5019)
    • ๐Ÿ“œ $parse:
      • one-time binding for literal expressions works as expected (c024f282, #8209)
      • correctly assign expressions who's path is undefined and that use brackets notation (c03ad249, #8039)
    • Scope: add deregisterNotifier to oneTimeLiteralWatch signature (a001a417)
    • jqLite:
      • allow triggerHandler() to accept custom event (01d81cda, #8469)
      • fix regression where mutating the dom tree on a event breaks jqLite.remove (a00c9bca, #8359)
    • ngSanitize: ensure html is a string in htmlParser() (34781f18, #8417, #8416)
    • select:
      • ensure that at least one option has the selected attribute set (25a476ea, #8366, #8429)
      • do not update selected property of an option element on digest with no change event (cdc7db3f, #8221, #7715)

    ๐Ÿ”‹ Features

    ๐ŸŽ Performance Improvements

    • $q: move Deferred and Promise methods to prototypes (23bc92b1, #8300)
    • input: prevent additional $digest when input is already touched (dd2a803f, #8450)

    ๐Ÿ’ฅ Breaking Changes

    • jQuery: due to 9e7cb3c3, Angular no longer supports jQuery versions below 2.1.1.
    • $q: due to 23bc92b1, Promises methods are no longer enumerated when using for-loops with hasOwnProperty check. E.g. angular.extends
  • v1.3.0-beta.17 Changes

    July 25, 2014

    ๐Ÿ› Bug Fixes

    • angular.copy: clone regexp flags correctly (86340a59, #5781, #8337)
    • ๐Ÿ“„ docs: change plnkr form to open in same window (925b2080)
    • jqLite: triggerHandler support unbind self (8a27abae, #5984)
    • ngHref: remove attribute when empty value instead of ignoring (469ea338, #2755)

    ๐Ÿ”‹ Features

    • $compile: change directive's restrict setting to default to EA (element/attribute) (11f5aeee, #8321)
    • $q: add streamlined ES6-style interface for using $q (f3a763fd, #8311, #6427)
    • ngRepeat: provide support for aliasing filtered repeater results as a scope member (e0adb9c4, #5919, #8046, #8282)

    ๐ŸŽ Performance Improvements

    • ๐Ÿ“œ $parse: don't use reflective calls in generated functions (c54228fb)

    ๐Ÿ’ฅ Breaking Changes

    • $compile: due to 11f5aeee, directives now match elements by default unless specific restriction rules are set via restrict property.

    This means that if a directive 'myFoo' previously didn't specify matching restriction, it will now match both the attribute and element form.

    Before:

    <div my-foo></div> <---- my-foo attribute matched the directive

    <my-foo></my-foo> <---- no match

    After:

    <div my-foo></div> <---- my-foo attribute matched the directive

    <my-foo></my-foo> <---- my-foo element matched the directive

    ๐Ÿ›  It is not expected that this will be a problem in practice because of widespread use of prefixes that make <my-foo> like elements unlikely.

    Closes #8321

  • v1.3.0-beta.16 Changes

    July 18, 2014

    ๐Ÿ› Bug Fixes

    ๐Ÿ”‹ Features

    ๐ŸŽ Performance Improvements

    • $compile: only create jqLite object when necessary (a160f76f)
    • bindOnce more performant interpolation and lazy one-time binding (86d55c1d)
    • jqLite: expose the low-level jqLite.data/removeData calls (e4ba8943)
    • ngBindHtml: move addClass to the compile phase (903e7352, #8261)

    ๐Ÿ’ฅ Breaking Changes

    • $compile: due to e8066c4b, Directives which previously depended on the implicit grouping between ๐Ÿ”จ directive-start and directive-end attributes must be refactored in order to see this same behavior.

    Before:

    <div data-fancy-directive-start>{{start}}</div>
      <p>Grouped content</p>
    <div data-fancy-directive-end>{{end}}</div>
    
    .directive('fancyDirective', function() {
      return {
        link: angular.noop
      };
    })
    

    After:

    <div data-fancy-directive-start>{{start}}</div>
      <p>Grouped content</p>
    <div data-fancy-directive-end>{{end}}</div>
    
    .directive('fancyDirective', function() {
      return {
        multiElement: true, // Explicitly mark as a multi-element directive.
        link: angular.noop
      };
    })
    

    Closes #5372 Closes #6574 Closes #5370 Closes #8044 Closes #7336

    Previously, it was possible for an action passed to $watch ๐Ÿ‘ to be a string, interpreted as an angular expression. This is no longer supported. The action now has to be a function. Passing an action to $watch is still optional.

    Before:

    $scope.$watch('state', ' name="" ');
    

    After:

    $scope.$watch('state', function () {
      $scope.name = "";
    });
    

    Closes #8190

    If using any of the mechanisms specified above, then migrate by specifying the attribute ng-app to the root element. E.g.

    <div ng-app="module">...</div>
    

    Closes #8147

    ๐Ÿ‘ The ngList directive no longer supports splitting the view value via a regular expression. We need to be able to re-join list items back together and doing this when you can split with regular expressions can ๐Ÿ‘ lead to inconsistent behavior and would be much more complex to support.

    If your application relies upon ngList splitting with a regular expression then you should either try to convert the separator to a simple string or you can implement your own version of this directive for you application.

    Closes #4008 Closes #2561 Closes #4344

    ** Directive Priority Changed ** - this commit changes the priority 0๏ธโƒฃ of ngSwitchWhen and ngSwitchDefault from 800 to 1200. This makes their priority higher than ngRepeat, which allows items to be repeated on the switch case element reliably.

    In general your directives should have a lower priority than these directives if you want them to exist inside the case elements. If you relied on the priority of these directives then you should check that your code still operates correctly.

    Closes #8235

  • v1.3.0-beta.15 Changes

    July 11, 2014

    ๐Ÿ› Bug Fixes

    • $animate:
    • $http:
      • don't remove content-type header if data is set by request transform (c7c363cf, #7910)
      • add ability to remove default headers (172a4093, #5784)
    • $location: remove query args when passed in object (2c7d0857, #6565)
    • input:
    • jqLite:
      • correctly dealoc svg elements in IE (012ab1f8)
      • remove exposed dealoc method (9c5b407f)
    • ngModel: test & update correct model when running $validate (f3cb2741, #7836, #7837)
    • ๐Ÿ“œ parseKeyValue: ignore properties in prototype chain (cb42766a, #8070, #8068)
    • select: auto-select new option that is marked as selected (b8ae73e1, #6828)

    ๐Ÿ”‹ Features

    • $animate: allow directives to cancel animation events (ca752790, #7722)
    • $controller: disable using global controller constructors (3f2232b5)
    • FormController: add $rollbackViewValue to rollback all controls (85b77314, #7595)
    • input: support constant expressions for ngTrueValue/ngFalseValue (c90cefe1, #8041, #5346, #1199)
    • ngAnimate: conditionally allow child animations to run in parallel with parent animations (8252b8be, #7946)
    • ngModel: bind to getters/setters (b9fcf017, #768)

    ๐ŸŽ Performance Improvements

    • $compile: no longer need nodeType filter when setting $scope data (b0ca5195, #7887)

    ๐Ÿ’ฅ Breaking Changes

    $controller will no longer look for controllers on window. The old behavior of looking on window for controllers was originally intended for use in examples, demos, and toy apps. We found that allowing global controller functions encouraged poor practices, so we resolved to disable this behavior by 0๏ธโƒฃ default.

    To migrate, register your controllers with modules rather than exposing them as globals:

    Before:

    function MyController() {
      // ...
    }
    

    After:

    angular.module('myApp', []).controller('MyController', [function() {
      // ...
    }]);
    

    Although it's not recommended, you can re-enable the old behavior like this:

    angular.module('myModule').config(['$controllerProvider', function($controllerProvider) {
      // this option might be handy for migrating old apps, but please don't use it
      // in new ones!
      $controllerProvider.allowGlobals();
    }]);
    

    ๐Ÿ“œ Previously, these attributes would always be treated as strings. However, they are now parsed as expressions, and will throw if an expression is non-constant.

    To convert non-constant strings into constant expressions, simply wrap them in an extra pair of quotes, like so:

    <input type="checkbox" ng-model="..." ng-true-value="'truthyValue'">
    

    Closes #8041 Closes #5346 Closes #1199