diff --git a/src/uiSelectDirective.js b/src/uiSelectDirective.js index 285cfb4ac..ce11eb615 100644 --- a/src/uiSelectDirective.js +++ b/src/uiSelectDirective.js @@ -149,6 +149,14 @@ uis.directive('uiSelect', } }); + attrs.$observe('taggingEquals', function() { + if (attrs.tagging !== undefined) { + // Used for check token equality by single property with custom objects + var property = attrs.taggingEquals !== undefined ? attrs.taggingEquals : undefined; + $select.taggingEqualsProperty = property; + } + }); + attrs.$observe('spinnerEnabled', function() { // $eval() is needed otherwise we get a string instead of a boolean var spinnerEnabled = scope.$eval(attrs.spinnerEnabled); @@ -378,7 +386,7 @@ uis.directive('uiSelect', }; var opened = false; - + scope.calculateDropdownPos = function() { if ($select.open) { dropdown = angular.element(element).querySelectorAll('.ui-select-dropdown'); diff --git a/src/uiSelectMultipleDirective.js b/src/uiSelectMultipleDirective.js index 1d0243724..f121b3caa 100644 --- a/src/uiSelectMultipleDirective.js +++ b/src/uiSelectMultipleDirective.js @@ -178,7 +178,7 @@ uis.directive('uiSelectMultiple', ['uiSelectMinErr','$timeout', function(uiSelec return; } $select.selected.push(item); - var locals = {}; + var locals = {}; locals[$select.parserResult.itemName] = item; $timeout(function(){ @@ -261,11 +261,11 @@ uis.directive('uiSelectMultiple', ['uiSelectMinErr','$timeout', function(uiSelec } else { return curr; } - + } else { // If nothing yet selected, select last item - return last; - } + return last; + } break; case KEY.DELETE: // Remove selected item and select next item @@ -329,10 +329,18 @@ uis.directive('uiSelectMultiple', ['uiSelectMinErr','$timeout', function(uiSelec // verify the new tag doesn't match the value of a possible selection choice or an already selected item. if ( stashArr.some(function (origItem) { - return angular.equals(origItem, newItem); + if($select.taggingEqualsProperty){ + return angular.equals(origItem[$select.taggingEqualsProperty], newItem[$select.taggingEqualsProperty]); + } else { + return angular.equals(origItem, newItem); + } }) || $select.selected.some(function (origItem) { - return angular.equals(origItem, newItem); + if($select.taggingEqualsProperty){ + return angular.equals(origItem[$select.taggingEqualsProperty], newItem[$select.taggingEqualsProperty]); + } else { + return angular.equals(origItem, newItem); + } }) ) { scope.$evalAsync(function () {