From b3cae4f457f1688346bbd0b08cccc9c504f83406 Mon Sep 17 00:00:00 2001 From: Sudhir Jonathan Date: Sun, 21 Oct 2012 12:57:27 +0530 Subject: [PATCH] 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 --- src/ng/directive/select.js | 7 +++++-- test/ng/directive/selectSpec.js | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index 0c94ddcb5c4f..e6e0ced7030b 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -386,7 +386,8 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { selected, selectedSet = false, // nothing is selected yet lastElement, - element; + element, + label; if (multiple) { selectedSet = new HashMap(modelValue); @@ -410,9 +411,11 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { selected = modelValue === valueFn(scope, locals); 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({ 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 }); } diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index c63d17bfaa66..7d17a1856fd8 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -493,6 +493,21 @@ describe('select', function() { expect(sortedHtml(options[2])).toEqual(''); }); + 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(''); + expect(sortedHtml(options[1])).toEqual(''); + expect(sortedHtml(options[2])).toEqual(''); + }); + it('should render an object', function() { createSelect({