NejcZdovc / ng2-select2

Select 2 wraper for angular2
MIT License
123 stars 93 forks source link

Changing [value] for multiple select only adds items to selection (does not remove any) #141

Open mactyr opened 5 years ago

mactyr commented 5 years ago

When I change the [value] of a select2 with the "multiple" attribute turned on, options in the new value that were not previously selected become selected, but all options that were previously selected also remain selected -- so my selection is the union of the old values and the new values, rather than just being the new values.

This also means that if I pass an empty array to [value], nothing changes, whereas I would expect all options to be un-selected.

I believe the issue is in setElementValue(), the innermost if needs an else to turn the selected property off when the option is not contained in the new value, like so:

if (newValue.indexOf(option.value) > -1) {
  this.renderer.setElementProperty(option, 'selected', 'true');
} else {
  this.renderer.setElementProperty(option, 'selected', null);
}
mactyr commented 5 years ago

Or I suppose the whole block could just collapse to:

this.renderer.setElementProperty(option, 'selected', newValue.indexOf(option.value) > -1 ? 'true' : null);
fflores-origin commented 4 years ago

yes actually adding that fix solves the problem, hope @NejcZdovc could update this plugin

tyspice commented 3 years ago

This issue seems to have been resolved in a more actively maintained fork: ng-select2