mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-16 18:51:06 +00:00
fix(select): select option with a label of 0 is not shown
Bug caused by the use of the `||` operator to replace all non-truthy values with an empty string. Changed to replace only `undefined` values. Closes #1401
This commit is contained in:
parent
7b52a976e1
commit
b3cae4f457
2 changed files with 20 additions and 2 deletions
|
|
@ -386,7 +386,8 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
||||||
selected,
|
selected,
|
||||||
selectedSet = false, // nothing is selected yet
|
selectedSet = false, // nothing is selected yet
|
||||||
lastElement,
|
lastElement,
|
||||||
element;
|
element,
|
||||||
|
label;
|
||||||
|
|
||||||
if (multiple) {
|
if (multiple) {
|
||||||
selectedSet = new HashMap(modelValue);
|
selectedSet = new HashMap(modelValue);
|
||||||
|
|
@ -410,9 +411,11 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
||||||
selected = modelValue === valueFn(scope, locals);
|
selected = modelValue === valueFn(scope, locals);
|
||||||
selectedSet = selectedSet || selected; // see if at least one item is selected
|
selectedSet = selectedSet || selected; // see if at least one item is selected
|
||||||
}
|
}
|
||||||
|
label = displayFn(scope, locals); // what will be seen by the user
|
||||||
|
label = label === undefined ? '' : label; // doing displayFn(scope, locals) || '' overwrites zero values
|
||||||
optionGroup.push({
|
optionGroup.push({
|
||||||
id: keyName ? keys[index] : index, // either the index into array or key from object
|
id: keyName ? keys[index] : index, // either the index into array or key from object
|
||||||
label: displayFn(scope, locals) || '', // what will be seen by the user
|
label: label,
|
||||||
selected: selected // determine if we should be selected
|
selected: selected // determine if we should be selected
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -493,6 +493,21 @@ describe('select', function() {
|
||||||
expect(sortedHtml(options[2])).toEqual('<option value="2">C</option>');
|
expect(sortedHtml(options[2])).toEqual('<option value="2">C</option>');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render zero as a valid display value', function() {
|
||||||
|
createSingleSelect();
|
||||||
|
|
||||||
|
scope.$apply(function() {
|
||||||
|
scope.values = [{name: 0}, {name: 1}, {name: 2}];
|
||||||
|
scope.selected = scope.values[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
var options = element.find('option');
|
||||||
|
expect(options.length).toEqual(3);
|
||||||
|
expect(sortedHtml(options[0])).toEqual('<option value="0">0</option>');
|
||||||
|
expect(sortedHtml(options[1])).toEqual('<option value="1">1</option>');
|
||||||
|
expect(sortedHtml(options[2])).toEqual('<option value="2">2</option>');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should render an object', function() {
|
it('should render an object', function() {
|
||||||
createSelect({
|
createSelect({
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue