From c5b3131219a031ac242fae0d9fe1d98380bb1a05 Mon Sep 17 00:00:00 2001 From: Robert Messerle Date: Mon, 13 Jul 2015 10:45:15 -0700 Subject: [PATCH] update(autocomplete): re-adds support for user-defined `item` value in `md-selected-item-change` Related to #3637 --- .../autocomplete/autocomplete.spec.js | 35 ++++++++++++++++++- .../autocomplete/js/autocompleteController.js | 2 +- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/components/autocomplete/autocomplete.spec.js b/src/components/autocomplete/autocomplete.spec.js index 8e01b578b30..4401e0e82ff 100644 --- a/src/components/autocomplete/autocomplete.spec.js +++ b/src/components/autocomplete/autocomplete.spec.js @@ -222,6 +222,39 @@ describe('', function() { expect(scope.itemChanged.calls.mostRecent().args[0]).toBeNull(); expect(scope.selectedItem).toBeNull(); })); - }); + it('should pass value to item watcher', inject(function($timeout, $mdConstant) { + var scope = createScope(); + var itemValue = null; + var template = '\ + \ + {{item.display}}\ + '; + scope.itemChanged = function(item) { + itemValue = item; + }; + var element = compile(template, scope); + var ctrl = element.controller('mdAutocomplete'); + element.scope().searchText = 'fo'; + ctrl.keydown({}); + element.scope().$apply(); + $timeout.flush(); + + ctrl.select(0); + element.scope().$apply(); + $timeout.flush(); + + expect(itemValue).not.toBeNull(); + expect(itemValue.display).toBe('foo'); + + ctrl.clear(); + element.scope().$apply(); + })); + }); }); diff --git a/src/components/autocomplete/js/autocompleteController.js b/src/components/autocomplete/js/autocompleteController.js index 1ea52cae09a..9b7e1f1a930 100644 --- a/src/components/autocomplete/js/autocompleteController.js +++ b/src/components/autocomplete/js/autocompleteController.js @@ -249,7 +249,7 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $timeout, $ * Use the user-defined expression to announce changes each time a new item is selected */ function announceItemChange() { - angular.isFunction($scope.itemChange) && $scope.itemChange(); + angular.isFunction($scope.itemChange) && $scope.itemChange(getItemAsNameVal($scope.selectedItem)); } function announceTextChange() {