|
| 1 | +<a name="1.4.6"></a> |
| 2 | +# 1.4.6 multiplicative-elevation (2015-09-17) |
| 3 | + |
| 4 | + |
| 5 | +## Bug Fixes |
| 6 | + |
| 7 | +- **$animate:** invalid CSS class names should not break subsequent elements |
| 8 | + ([c3a654b7](https://github.com/angular/angular.js/commit/c3a654b7c8e585b8fb9f90ece10ef54d19fd74c8), |
| 9 | + [#12674](https://github.com/angular/angular.js/issues/12674), [#12725](https://github.com/angular/angular.js/issues/12725)) |
| 10 | +- **$browser:** handle async updates to location |
| 11 | + ([8d39bd8a](https://github.com/angular/angular.js/commit/8d39bd8abf423517b5bff70137c2a29e32bff76d), |
| 12 | + [#12241](https://github.com/angular/angular.js/issues/12241), [#12819](https://github.com/angular/angular.js/issues/12819)) |
| 13 | +- **$http:** propagate status -1 for timed out requests |
| 14 | + ([38520a1a](https://github.com/angular/angular.js/commit/38520a1a73fffb6cfeffc7edfcab5be33e1619eb), |
| 15 | + [#4491](https://github.com/angular/angular.js/issues/4491), [#8756](https://github.com/angular/angular.js/issues/8756)) |
| 16 | +- **$httpBackend:** send `null` when post-data is undefined |
| 17 | + ([6f39f108](https://github.com/angular/angular.js/commit/6f39f1082773921e79b48a78aa6cd8a7d1921da7), |
| 18 | + [#12141](https://github.com/angular/angular.js/issues/12141), [#12739](https://github.com/angular/angular.js/issues/12739)) |
| 19 | +- **$parse:** |
| 20 | + - throw error when accessing a restricted property indirectly |
| 21 | + ([b2f8b0b8](https://github.com/angular/angular.js/commit/b2f8b0b875dbabf7bba0ba6e9bd553c7a8b910d0), |
| 22 | + [#12833](https://github.com/angular/angular.js/issues/12833)) |
| 23 | + - `assign` returns the new value |
| 24 | + ([7d2c6eee](https://github.com/angular/angular.js/commit/7d2c6eeef8ad61690737b6298c94f066082eff58), |
| 25 | + [#12675](https://github.com/angular/angular.js/issues/12675), [#12708](https://github.com/angular/angular.js/issues/12708)) |
| 26 | +- **angular.copy:** support copying XML nodes |
| 27 | + ([122ab074](https://github.com/angular/angular.js/commit/122ab074cac6401ecded51fa031af139360f40aa), |
| 28 | + [#5429](https://github.com/angular/angular.js/issues/5429), [#12786](https://github.com/angular/angular.js/issues/12786)) |
| 29 | +- **form, ngModel:** correctly notify parent form when children are added |
| 30 | + ([c6110e8b](https://github.com/angular/angular.js/commit/c6110e8b08c7e9bb2b7da5ecc5c42d1a834ea92d)) |
| 31 | +- **input:** ignore min/max if they are empty on all input types |
| 32 | + ([544001f5](https://github.com/angular/angular.js/commit/544001f5a331de06961c0201d69ecc92893abd0b), |
| 33 | + [#12363](https://github.com/angular/angular.js/issues/12363), [#12785](https://github.com/angular/angular.js/issues/12785)) |
| 34 | +- **ngAnimateMock:** $animate.flush should work for looping animations |
| 35 | + ([472d076c](https://github.com/angular/angular.js/commit/472d076cca2ffb99bd87d3c026ef69afc713268d)) |
| 36 | +- **ngAria:** clean up tabindex usage |
| 37 | + ([f48244ce](https://github.com/angular/angular.js/commit/f48244ce5e6d11637aab97af1aff3430bda12429), |
| 38 | + [#11500](https://github.com/angular/angular.js/issues/11500)) |
| 39 | +- **ngJq:** properly detect when `ng-jq` is empty |
| 40 | + ([19ecdb54](https://github.com/angular/angular.js/commit/19ecdb54bf85fc4e7bd3cde453aa6843f869a1ab), |
| 41 | + [#12741](https://github.com/angular/angular.js/issues/12741)) |
| 42 | +- **ngModel:** |
| 43 | + - remove reference to parentForm from removed control |
| 44 | + ([290b5049](https://github.com/angular/angular.js/commit/290b5049c2de4aa0d6ba8eea624bc6dce027b197), |
| 45 | + [#12263](https://github.com/angular/angular.js/issues/12263)) |
| 46 | + - let aliased validator directives work on any element |
| 47 | + ([43769fb6](https://github.com/angular/angular.js/commit/43769fb676ae904852582a2c88a5523f0b9f58fc), |
| 48 | + [#12158](https://github.com/angular/angular.js/issues/12158), [#12658](https://github.com/angular/angular.js/issues/12658)) |
| 49 | +- **ngRepeat:** add support to iterate an object's properties even if it does not inherit from Object |
| 50 | + ([7ea2c7f3](https://github.com/angular/angular.js/commit/7ea2c7f36ef854391df3f6b127ad42a2d5cbf1a3), |
| 51 | + [#9964](https://github.com/angular/angular.js/issues/9964)) |
| 52 | +- **rootScope:** add support for watchCollection to watch an object which does not inherit from Object |
| 53 | + ([20fb626b](https://github.com/angular/angular.js/commit/20fb626b78ed8fbd02f59f5b26df9387a2a6ea0e), |
| 54 | + [#9964](https://github.com/angular/angular.js/issues/9964)) |
| 55 | +- **select:** update option if interpolated value attribute changes |
| 56 | + ([82b0929e](https://github.com/angular/angular.js/commit/82b0929e4ea0ae087f766f2ee26f9570c8a3c8ac), |
| 57 | + [#12005](https://github.com/angular/angular.js/issues/12005), [#12582](https://github.com/angular/angular.js/issues/12582)) |
| 58 | +- **toDebugString:** change replacement string |
| 59 | + ([0ca8b1df](https://github.com/angular/angular.js/commit/0ca8b1df201044019596db7173d784aeebdea0a7), |
| 60 | + [#10103](https://github.com/angular/angular.js/issues/10103)) |
| 61 | + |
| 62 | + |
| 63 | +## Performance Improvements |
| 64 | + |
| 65 | +- **Angular:** only create new collection in getBlockNodes if the block has changed |
| 66 | + ([0202663e](https://github.com/angular/angular.js/commit/0202663e938a477cd86145bb158bf7a02efd8fb5), |
| 67 | + [#9899](https://github.com/angular/angular.js/issues/9899)) |
| 68 | + |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | +<a name="1.3.19"></a> |
| 73 | +# 1.3.19 glutinous-shriek (2015-09-15) |
| 74 | + |
| 75 | +## Bug Fixes |
| 76 | + |
| 77 | +- **$http:** propagate status -1 for timed out requests |
| 78 | + ([f13055a0](https://github.com/angular/angular.js/commit/f13055a0a53a39b160448713a5617edee6042801), |
| 79 | + [#4491](https://github.com/angular/angular.js/issues/4491), [#8756](https://github.com/angular/angular.js/issues/8756)) |
| 80 | +- **$location:** don't crash if navigating outside the app base |
| 81 | + ([623ce1ad](https://github.com/angular/angular.js/commit/623ce1ad2cf68024719c5cae5d682d00195df30c), |
| 82 | + [#11667](https://github.com/angular/angular.js/issues/11667)) |
| 83 | +- **$parse:** throw error when accessing a restricted property indirectly |
| 84 | + ([ec98c94c](https://github.com/angular/angular.js/commit/ec98c94ccbfc97b655447956738d5f6ff98b2f33), |
| 85 | + [#12833](https://github.com/angular/angular.js/issues/12833)) |
| 86 | +- **ngModel:** validate pattern against the viewValue |
| 87 | + ([274e9353](https://github.com/angular/angular.js/commit/274e93537ed4e95aefeacea48909eb334894f0ac), |
| 88 | + [#12344](https://github.com/angular/angular.js/issues/12344)) |
| 89 | + |
| 90 | + |
| 91 | +## Features |
| 92 | + |
| 93 | +- **ngAnimate:** introduce `$animate.flush` for unit testing |
| 94 | + ([f98e0384](https://github.com/angular/angular.js/commit/f98e038418f7367b2373adcf4887f64a8e8bdcb0)) |
| 95 | + |
| 96 | + |
| 97 | +## Possible Breaking Changes |
| 98 | + |
| 99 | +- **ngModel:** due to [274e9353](https://github.com/angular/angular.js/commit/274e93537ed4e95aefeacea48909eb334894f0ac), |
| 100 | + |
| 101 | + |
| 102 | +The `ngPattern` and `pattern` directives will validate the regex |
| 103 | +against the `viewValue` of `ngModel`, i.e. the value of the model |
| 104 | +before the $parsers are applied. Previously, the modelValue |
| 105 | +(the result of the $parsers) was validated. |
| 106 | + |
| 107 | +This fixes issues where `input[date]` and `input[number]` cannot |
| 108 | +be validated because the viewValue string is parsed into |
| 109 | +`Date` and `Number` respectively (starting with Angular 1.3). |
| 110 | +It also brings the directives in line with HTML5 constraint |
| 111 | +validation, which validates against the input value. |
| 112 | + |
| 113 | +This change is unlikely to cause applications to fail, because even |
| 114 | +in Angular 1.2, the value that was validated by pattern could have |
| 115 | +been manipulated by the $parsers, as all validation was done |
| 116 | +inside this pipeline. |
| 117 | + |
| 118 | +If you rely on the pattern being validated against the modelValue, |
| 119 | +you must create your own validator directive that overwrites |
| 120 | +the built-in pattern validator: |
| 121 | + |
| 122 | +``` |
| 123 | +.directive('patternModelOverwrite', function patternModelOverwriteDirective() { |
| 124 | + return { |
| 125 | + restrict: 'A', |
| 126 | + require: '?ngModel', |
| 127 | + priority: 1, |
| 128 | + compile: function() { |
| 129 | + var regexp, patternExp; |
| 130 | + |
| 131 | + return { |
| 132 | + pre: function(scope, elm, attr, ctrl) { |
| 133 | + if (!ctrl) return; |
| 134 | + |
| 135 | + attr.$observe('pattern', function(regex) { |
| 136 | + /** |
| 137 | + * The built-in directive will call our overwritten validator |
| 138 | + * (see below). We just need to update the regex. |
| 139 | + * The preLink fn guaranetees our observer is called first. |
| 140 | + */ |
| 141 | + if (isString(regex) && regex.length > 0) { |
| 142 | + regex = new RegExp('^' + regex + '$'); |
| 143 | + } |
| 144 | + |
| 145 | + if (regex && !regex.test) { |
| 146 | + //The built-in validator will throw at this point |
| 147 | + return; |
| 148 | + } |
| 149 | + |
| 150 | + regexp = regex || undefined; |
| 151 | + }); |
| 152 | + |
| 153 | + }, |
| 154 | + post: function(scope, elm, attr, ctrl) { |
| 155 | + if (!ctrl) return; |
| 156 | + |
| 157 | + regexp, patternExp = attr.ngPattern || attr.pattern; |
| 158 | + |
| 159 | + //The postLink fn guarantees we overwrite the built-in pattern validator |
| 160 | + ctrl.$validators.pattern = function(value) { |
| 161 | + return ctrl.$isEmpty(value) || |
| 162 | + isUndefined(regexp) || |
| 163 | + regexp.test(value); |
| 164 | + }; |
| 165 | + } |
| 166 | + }; |
| 167 | + } |
| 168 | + }; |
| 169 | +}); |
| 170 | +``` |
| 171 | + |
| 172 | + |
| 173 | + |
| 174 | + |
1 | 175 | <a name="1.4.5"></a>
|
2 | 176 | # 1.4.5 permanent-internship (2015-08-28)
|
3 | 177 |
|
|
0 commit comments