1.6.0-rc.1 proximity-warning (2016-11-21)
New Features
- ngModelOptions: allow options to be inherited from ancestor
ngModelOptions
(296cfc #10922) - $compile: set
preAssignBindingsEnabled
to false by default (bcd0d4 #15352)
Bug Fixes
- ngModelOptions: handle debounce of
updateOn
triggers that are not in debounce list (789790) - ngMock/$controller: respect
$compileProvider.preAssignBindingsEnabled()
(7d9a79) - $location: throw if the path starts with double (back)slashes (4aa953)
- core: do not auto-bootstrap when loaded from an extension. (0ff10e)
- input[radio]: use strict comparison when evaluating checked-ness (5ac7da #15288)
Reverts
- ngModelOptions: allow options to be inherited from ancestor ngModelOptions (fb0225)
Performance Improvements
- ngOptions: avoid calls to
element.value
(3b7f29)
Breaking Changes
- feat($compile): set preAssignBindingsEnabled to false by default (bcd0d4):
Previously, $compileProvider.preAssignBindingsEnabled
was
set to true by default. This means bindings were pre-assigned in component
constructors. In AngularJS 1.5+ the place to put the initialization logic
relying on bindings being present is the controller $onInit
method.
To migrate follow the example below:
Before:
angular.module('myApp', [])
.component('myComponent', {
bindings: {value: '<'},
controller: function() {
this.doubleValue = this.value * 2;
}
});
After:
angular.module('myApp', [])
.component('myComponent', {
bindings: {value: '<'},
controller: function() {
this.$onInit = function() {
this.doubleValue = this.value * 2;
};
}
});
If you don't have time to migrate the code at the moment, you can flip the
setting back to true:
angular.module('myApp', [])
.config(function($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
})
.component('myComponent', {
bindings: {value: '<'},
controller: function() {
this.doubleValue = this.value * 2;
}
});
Don't do this if you're writing a library, though, as you shouldn't change
global configuration then.
- fix(input[radio]): use strict comparison when evaluating checked-ness (5ac7da):
When using input[radio], the checked status is now determined by doing
a strict comparison between the value of the input and the ngModel.$viewValue.
Previously, this was a non-strict comparison (==).
This means in the following examples the radio is no longer checked:
<!-- this.selected = 0 -->
<input type="radio" ng-model="$ctrl.selected" value="0" >
<!-- this.selected = 0; this.value = false; -->
<input type="radio" ng-model="$ctrl.selected" ng-value="$ctrl.value" >
The migration strategy is to convert values that matched with non-strict
conversion so that they will match with strict conversion.
- feat(ngModelOptions): allow options to be inherited from ancestor
ngModelOptions
(296cfc):
The programmatic API for ngModelOptions
has changed. You must now read options
via the ngModelController.$options.getOption(name)
method, rather than accessing the
option directly as a property of the ngModelContoller.$options
object. This does not
affect the usage in templates and only affects custom directives that might have been
reading options for their own purposes.
One benefit of these changes, though, is that the ngModelControler.$options
property
is now guaranteed to be defined so there is no need to check before accessing.
So, previously:
var myOption = ngModelController.$options && ngModelController.$options['my-option'];
and now:
var myOption = ngModelController.$options.getOption('my-option');
<a name="1.6.0-rc.0"></a>