From 5004a2a6d4f58e1dc9b310197748e4f82d52e2a5 Mon Sep 17 00:00:00 2001 From: Jeremy Elbourn Date: Mon, 2 Nov 2015 13:46:23 -0800 Subject: [PATCH] fix(datepicker): throw error if inside md-input-container. For #5055 --- src/components/datepicker/datePicker.js | 7 ++++++- src/components/datepicker/datePicker.spec.js | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/components/datepicker/datePicker.js b/src/components/datepicker/datePicker.js index 0c75f2711d8..8bdcfa477ed 100644 --- a/src/components/datepicker/datePicker.js +++ b/src/components/datepicker/datePicker.js @@ -79,7 +79,7 @@ '' + '' + '', - require: ['ngModel', 'mdDatepicker'], + require: ['ngModel', 'mdDatepicker', '?^mdInputContainer'], scope: { minDate: '=mdMinDate', maxDate: '=mdMaxDate', @@ -92,6 +92,11 @@ var ngModelCtrl = controllers[0]; var mdDatePickerCtrl = controllers[1]; + var mdInputContainer = controllers[2]; + if (mdInputContainer) { + throw Error('md-datepicker should not be placed inside md-input-container.'); + } + mdDatePickerCtrl.configureNgModel(ngModelCtrl); } }; diff --git a/src/components/datepicker/datePicker.spec.js b/src/components/datepicker/datePicker.spec.js index 91106a93fdb..bc924f8ad40 100644 --- a/src/components/datepicker/datePicker.spec.js +++ b/src/components/datepicker/datePicker.spec.js @@ -19,7 +19,12 @@ describe('md-date-picker', function() { 'ng-disabled="isDisabled">' + ''; - beforeEach(module('material.components.datepicker', 'ngAnimateMock')); + var fakeInputModule = angular.module('fakeInputModule', []) + .directive('mdInputContainer', function() { + return {controller: angular.noop}; + }); + + beforeEach(module('material.components.datepicker', 'ngAnimateMock', 'fakeInputModule')); beforeEach(inject(function($rootScope, $injector) { $compile = $injector.get('$compile'); @@ -94,6 +99,17 @@ describe('md-date-picker', function() { expect(controller.inputElement.placeholder).toBe('Fancy new placeholder'); }); + it('should throw an error when inside of md-input-container', function() { + var template = + '' + + '' + + ''; + + expect(function() { + $compile(template)(pageScope); + }).toThrowError('md-datepicker should not be placed inside md-input-container.'); + }); + describe('ngMessages suport', function() { it('should set the `required` $error flag', function() { pageScope.isRequired = true;