fix(directive): ng:options incorrectly re-grew options on datasource change

Closes #464
This commit is contained in:
Misko Hevery 2011-07-11 12:55:29 -07:00
parent f3456dc282
commit c348f2cad6
3 changed files with 23 additions and 1 deletions

View file

@ -3,6 +3,7 @@
### Bug Fixes
- Issue #449: [ng:options] should support binding to a property of an item.
- Issue #464: [ng:options] incorrectly re-grew options on datasource change
### Breaking changes
- no longer support MMMMM in filter.date as we need to follow UNICODE LOCALE DATA formats.

View file

@ -783,10 +783,13 @@ angularWidget('select', function(element){
}
}
}
if (fragment) select.append(jqLite(fragment));
if (fragment) {
select.append(jqLite(fragment));
}
// shrink children
while(optionElements.length > index) {
optionElements.pop().remove();
optionTexts.pop();
delete lastSelectValue[optionElements.length];
}

View file

@ -672,6 +672,24 @@ describe("widget", function(){
expect(select.find('option').length).toEqual(1); // we add back the special empty option
});
it('should shrink and then grow list', function(){
createSingleSelect();
scope.values = [{name:'A'}, {name:'B'}, {name:'C'}];
scope.selected = scope.values[0];
scope.$eval();
expect(select.find('option').length).toEqual(3);
scope.values = [{name:'1'}, {name:'2'}];
scope.selected = scope.values[0];
scope.$eval();
expect(select.find('option').length).toEqual(2);
scope.values = [{name:'A'}, {name:'B'}, {name:'C'}];
scope.selected = scope.values[0];
scope.$eval();
expect(select.find('option').length).toEqual(3);
});
it('should update list', function(){
createSingleSelect();
scope.values = [{name:'A'}, {name:'B'}, {name:'C'}];