|
| 1 | +<a name="1.3.0-beta.8"></a> |
| 2 | +# 1.3.0-beta.8 accidental-haiku (2014-05-09) |
| 3 | + |
| 4 | + |
| 5 | +## Bug Fixes |
| 6 | + |
| 7 | +- **$compile:** set $isolateScope correctly for sync template directives |
| 8 | + ([562c4e42](https://github.com/angular/angular.js/commit/562c4e424b0ed5f8d4bffba0cd18e66db2059043), |
| 9 | + [#6942](https://github.com/angular/angular.js/issues/6942)) |
| 10 | +- **$httpBackend:** Add missing expectHEAD() method |
| 11 | + ([e1d61784](https://github.com/angular/angular.js/commit/e1d6178457045e721872022f71227b277cb88726), |
| 12 | + [#7320](https://github.com/angular/angular.js/issues/7320)) |
| 13 | +- **$interpolate:** don't ReferenceError when context is undefined |
| 14 | + ([924ee6db](https://github.com/angular/angular.js/commit/924ee6db06a2518224caada86769efedd21c0710), |
| 15 | + [#7230](https://github.com/angular/angular.js/issues/7230), [#7237](https://github.com/angular/angular.js/issues/7237)) |
| 16 | +- **grunt-utils:** ensure special inline CSS works when `angular` is not a global |
| 17 | + ([af72f40a](https://github.com/angular/angular.js/commit/af72f40a5512daa97c1f175a59b547c33cff1dc0), |
| 18 | + [#7176](https://github.com/angular/angular.js/issues/7176)) |
| 19 | +- **injector:** invoke config blocks for module after all providers |
| 20 | + ([c0b4e2db](https://github.com/angular/angular.js/commit/c0b4e2db9cbc8bc3164cedc4646145d3ab72536e), |
| 21 | + [#7139](https://github.com/angular/angular.js/issues/7139), [#7147](https://github.com/angular/angular.js/issues/7147)) |
| 22 | +- **ngModelOptions:** |
| 23 | + - enable overriding the default with a debounce of zero |
| 24 | + ([c56e32a7](https://github.com/angular/angular.js/commit/c56e32a7fa44e2edd2c70f663906720c7c9ad898), |
| 25 | + [#7205](https://github.com/angular/angular.js/issues/7205)) |
| 26 | + - initialize ngModelOptions in prelink |
| 27 | + ([fbf5ab8f](https://github.com/angular/angular.js/commit/fbf5ab8f17d28efeadb492c5a252f0778643f072), |
| 28 | + [#7281](https://github.com/angular/angular.js/issues/7281), [#7292](https://github.com/angular/angular.js/issues/7292)) |
| 29 | +- **ngSanitize:** encode surrogate pair properly |
| 30 | + ([627b0354](https://github.com/angular/angular.js/commit/627b0354ec35bef5c6dbfab6469168c2fadcbee5), |
| 31 | + [#5088](https://github.com/angular/angular.js/issues/5088), [#6911](https://github.com/angular/angular.js/issues/6911)) |
| 32 | +- **ngSrc, ngSrcset:** only interpolate if all expressions are defined |
| 33 | + ([8d180383](https://github.com/angular/angular.js/commit/8d180383014cbe38d58ff3eab083f51cfcfb8dde), |
| 34 | + [#6984](https://github.com/angular/angular.js/issues/6984)) |
| 35 | +- **ngSwitch:** properly support case labels with different numbers of transclude fns |
| 36 | + ([ac37915e](https://github.com/angular/angular.js/commit/ac37915ef64c60ec8f8d4e49e4d61d7baeb96ba0), |
| 37 | + [#7372](https://github.com/angular/angular.js/issues/7372), [#7373](https://github.com/angular/angular.js/issues/7373)) |
| 38 | + |
| 39 | + |
| 40 | +## Features |
| 41 | + |
| 42 | +- **$compile:** allow SVG and MathML templates via special `type` property |
| 43 | + ([f0e12ea7](https://github.com/angular/angular.js/commit/f0e12ea7fea853192e4eead00b40d6041c5f914a), |
| 44 | + [#7265](https://github.com/angular/angular.js/issues/7265)) |
| 45 | +- **$interpolate:** add optional allOrNothing param |
| 46 | + ([c2362e3f](https://github.com/angular/angular.js/commit/c2362e3f45e732a9defdb0ea59ce4ec5236fcd3a)) |
| 47 | +- **FormController:** commit `$viewValue` of all child controls when form is submitted |
| 48 | + ([a0ae07bd](https://github.com/angular/angular.js/commit/a0ae07bd4ee8d98654df4eb261d16ca55884e374), |
| 49 | + [#7017](https://github.com/angular/angular.js/issues/7017)) |
| 50 | +- **NgMessages:** introduce the NgMessages module and directives |
| 51 | + ([0f4016c8](https://github.com/angular/angular.js/commit/0f4016c84a47e01a0fb993867dfd0a64828c089c)) |
| 52 | + |
| 53 | + |
| 54 | +## Breaking Changes |
| 55 | + |
| 56 | +- **$http:** due to [ad4336f9](https://github.com/angular/angular.js/commit/ad4336f9359a073e272930f8f9bcd36587a8648f), |
| 57 | + |
| 58 | + |
| 59 | +Previously, it was possible to register a response interceptor like so: |
| 60 | + |
| 61 | +```js |
| 62 | +// register the interceptor as a service |
| 63 | +$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { |
| 64 | + return function(promise) { |
| 65 | + return promise.then(function(response) { |
| 66 | + // do something on success |
| 67 | + return response; |
| 68 | + }, function(response) { |
| 69 | + // do something on error |
| 70 | + if (canRecover(response)) { |
| 71 | + return responseOrNewPromise |
| 72 | + } |
| 73 | + return $q.reject(response); |
| 74 | + }); |
| 75 | + } |
| 76 | +}); |
| 77 | + |
| 78 | +$httpProvider.responseInterceptors.push('myHttpInterceptor'); |
| 79 | +``` |
| 80 | + |
| 81 | +Now, one must use the newer API introduced in v1.1.4 (4ae46814), like so: |
| 82 | + |
| 83 | +```js |
| 84 | +$provide.factory('myHttpInterceptor', function($q) { |
| 85 | + return { |
| 86 | + response: function(response) { |
| 87 | + // do something on success |
| 88 | + return response; |
| 89 | + }, |
| 90 | + responseError: function(response) { |
| 91 | + // do something on error |
| 92 | + if (canRecover(response)) { |
| 93 | + return responseOrNewPromise |
| 94 | + } |
| 95 | + return $q.reject(response); |
| 96 | + } |
| 97 | + }; |
| 98 | +}); |
| 99 | + |
| 100 | +$httpProvider.interceptors.push('myHttpInterceptor'); |
| 101 | +``` |
| 102 | + |
| 103 | +More details on the new interceptors API (which has been around as of v1.1.4) can be found at |
| 104 | +https://docs.angularjs.org/api/ng/service/$http#interceptors |
| 105 | + |
| 106 | + |
| 107 | +- **injector:** due to [c0b4e2db](https://github.com/angular/angular.js/commit/c0b4e2db9cbc8bc3164cedc4646145d3ab72536e), |
| 108 | + |
| 109 | +Previously, config blocks would be able to control behaviour of provider registration, due to being |
| 110 | +invoked prior to provider registration. Now, provider registration always occurs prior to configuration |
| 111 | +for a given module, and therefore config blocks are not able to have any control over a providers |
| 112 | +registration. |
| 113 | + |
| 114 | +**Example**: |
| 115 | + |
| 116 | +Previously, the following: |
| 117 | + |
| 118 | +```js |
| 119 | +angular.module('foo', []) |
| 120 | + .provider('$rootProvider', function() { |
| 121 | + this.$get = function() { ... } |
| 122 | + }) |
| 123 | + .config(function($rootProvider) { |
| 124 | + $rootProvider.dependentMode = "B"; |
| 125 | + }) |
| 126 | + .provider('$dependentProvider', function($rootProvider) { |
| 127 | + if ($rootProvider.dependentMode === "A") { |
| 128 | + this.$get = function() { |
| 129 | + // Special mode! |
| 130 | + } |
| 131 | + } else { |
| 132 | + this.$get = function() { |
| 133 | + // something else |
| 134 | + } |
| 135 | + } |
| 136 | + }); |
| 137 | +``` |
| 138 | + |
| 139 | +would have "worked", meaning behaviour of the config block between the registration of "$rootProvider" |
| 140 | +and "$dependentProvider" would have actually accomplished something and changed the behaviour of the |
| 141 | +app. This is no longer possible within a single module. |
| 142 | + |
| 143 | + |
| 144 | +- **ngModelOptions:** due to [adfc322b](https://github.com/angular/angular.js/commit/adfc322b04a58158fb9697e5b99aab9ca63c80bb), |
| 145 | + |
| 146 | + |
| 147 | +This commit changes the API on `NgModelController`, both semantically and |
| 148 | +in terms of adding and renaming methods. |
| 149 | + |
| 150 | +* `$setViewValue(value)` - |
| 151 | +This method still changes the `$viewValue` but does not immediately commit this |
| 152 | +change through to the `$modelValue` as it did previously. |
| 153 | +Now the value is committed only when a trigger specified in an associated |
| 154 | +`ngModelOptions` directive occurs. If `ngModelOptions` also has a `debounce` delay |
| 155 | +specified for the trigger then the change will also be debounced before being |
| 156 | +committed. |
| 157 | +In most cases this should not have a significant impact on how `NgModelController` |
| 158 | +is used: If `updateOn` includes `default` then `$setViewValue` will trigger |
| 159 | +a (potentially debounced) commit immediately. |
| 160 | +* `$cancelUpdate()` - is renamed to `$rollbackViewValue()` and has the same meaning, |
| 161 | +which is to revert the current `$viewValue` back to the `$lastCommittedViewValue`, |
| 162 | +to cancel any pending debounced updates and to re-render the input. |
| 163 | + |
| 164 | +To migrate code that used `$cancelUpdate()` follow the example below: |
| 165 | + |
| 166 | +Before: |
| 167 | + |
| 168 | +```js |
| 169 | +$scope.resetWithCancel = function (e) { |
| 170 | + if (e.keyCode == 27) { |
| 171 | + $scope.myForm.myInput1.$cancelUpdate(); |
| 172 | + $scope.myValue = ''; |
| 173 | + } |
| 174 | +}; |
| 175 | +``` |
| 176 | + |
| 177 | +After: |
| 178 | + |
| 179 | +```js |
| 180 | +$scope.resetWithCancel = function (e) { |
| 181 | + if (e.keyCode == 27) { |
| 182 | + $scope.myForm.myInput1.$rollbackViewValue(); |
| 183 | + $scope.myValue = ''; |
| 184 | + } |
| 185 | +} |
| 186 | +``` |
| 187 | + |
| 188 | + |
1 | 189 | <a name="v1.3.0-beta.7"></a>
|
2 | 190 | # v1.3.0-beta.7 proper-attribution (2014-04-25)
|
3 | 191 |
|
|
0 commit comments