diff --git a/src/components/select/select.js b/src/components/select/select.js index 08d231d9620..0f4b25f5b91 100755 --- a/src/components/select/select.js +++ b/src/components/select/select.js @@ -68,6 +68,7 @@ angular.module('material.components.select', [ function SelectDirective($mdSelect, $mdUtil, $mdTheming) { return { restrict: 'E', + require: '?ngModel', compile: compile }; @@ -119,7 +120,7 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming) { $mdTheming(element); - return function postLink(scope, element, attr) { + return function postLink(scope, element, attr, ngModel) { element.on('click', openSelect); element.on('keydown', openOnKeypress); @@ -147,10 +148,9 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming) { scope: scope.$new(), template: selectTemplate, target: element[0], + ngModel: ngModel, hasBackdrop: true, loadingAsync: attr.mdOnOpen ? scope.$eval(attr.mdOnOpen) : false - }).then(function() { - element.attr('aria-expanded', false); }); }); } @@ -474,6 +474,10 @@ function SelectProvider($$interimElementProvider) { configureAria(); + if (opts.ngModel) { + opts.selectEl.controller('mdSelectMenu').init(opts.ngModel); + } + if (opts.loadingAsync && opts.loadingAsync.then) { opts.loadingAsync.then(function() { scope.$$loadingAsyncDone = true; diff --git a/src/components/select/select.spec.js b/src/components/select/select.spec.js index 8a5a1dd29fd..1f1354f6643 100755 --- a/src/components/select/select.spec.js +++ b/src/components/select/select.spec.js @@ -190,6 +190,23 @@ describe('', function() { expect($rootScope.model).toBe(3); })); + it('should support the ng-change event', inject(function($rootScope, $document) { + var changeCalled = false; + $rootScope.changed = function() { + changeCalled = true; + }; + + var selectEl = setupSelect('ng-model="myModel", ng-change="changed()"', [1, 2, 3]); + openSelect(selectEl); + waitForSelectOpen(); + var menuEl = $document.find('md-select-menu'); + menuEl.triggerHandler({ + type: 'click', + target: menuEl.find('md-option')[1] + }); + expect(changeCalled).toBe(true); + })); + it('should deselect old and select new on click', inject(function($rootScope) { $rootScope.model = 3; var el = setup('ng-model="$root.model"', [1,2,3]); @@ -461,16 +478,13 @@ describe('', function() { describe('aria', function() { var el; - beforeEach(inject(function($mdUtil, $q) { + beforeEach(inject(function($mdUtil, $q, $document) { el = setupSelect('ng-model="someModel"', [1, 2, 3]); $mdUtil.transitionEndPromise = function() { var deferred = $q.defer(); deferred.resolve(); return deferred.promise; }; - })); - - afterEach(inject(function($document) { var selectMenus = $document.find('md-select-menu'); selectMenus.remove(); }));