diff --git a/src/uiSelectController.js b/src/uiSelectController.js index 0d1c595eb..41c91e179 100644 --- a/src/uiSelectController.js +++ b/src/uiSelectController.js @@ -454,9 +454,16 @@ uis.controller('uiSelectCtrl', }; ctrl.clear = function($event) { + var locals = {}; + locals[ctrl.parserResult.itemName] = ctrl.selected; + ctrl.select(null); $event.stopPropagation(); $timeout(function() { + ctrl.onRemoveCallback($scope, { + $item: ctrl.items[ctrl.activeIndex], + $model: ctrl.parserResult.modelMapper($scope, locals) + }); ctrl.focusser[0].focus(); }, 0, false); }; diff --git a/test/select.spec.js b/test/select.spec.js index 3922834af..48e44b777 100644 --- a/test/select.spec.js +++ b/test/select.spec.js @@ -174,6 +174,7 @@ describe('ui-select tests', function () { if (attrs.backspaceReset !== undefined) { attrsHtml += ' backspace-reset="' + attrs.backspaceReset + '"'; } if (attrs.uiDisableChoice !== undefined) { choicesAttrsHtml += ' ui-disable-choice="' + attrs.uiDisableChoice + '"'; } if (attrs.removeSelected !== undefined) { attrsHtml += ' remove-selected="' + attrs.removeSelected + '"'; } + if (attrs.onRemove !== undefined) { attrsHtml += ' on-remove="' + attrs.onRemove + '"'; } } return compileTemplate( @@ -1369,6 +1370,27 @@ describe('ui-select tests', function () { }); + it('should invoke remove callback on remove for single select with allowClear enabled', function () { + scope.selection.selected = scope.people[5]; + + scope.onRemoveFn = function ($item, $model) { + scope.$item = $item; + scope.$model = $model; + }; + + var el = createUiSelect({ onRemove: 'onRemoveFn($item, $model)', allowClear: true }); + + expect(scope.$item).toBeFalsy(); + expect(scope.$model).toBeFalsy(); + + el.find('.glyphicon.glyphicon-remove').click(); + $timeout.flush(); + + expect(scope.$item).toEqual(scope.people[5]); + expect(scope.$model).toEqual(scope.$item); + + }); + it('should set $item & $model correctly when invoking callback on remove and no single prop. binding', function () { scope.onRemoveFn = function ($item, $model, $label) {