diff --git a/src/lib/datepicker/datepicker-toggle.ts b/src/lib/datepicker/datepicker-toggle.ts index e1b66eb934f..b02e521c189 100644 --- a/src/lib/datepicker/datepicker-toggle.ts +++ b/src/lib/datepicker/datepicker-toggle.ts @@ -66,7 +66,11 @@ export class MatDatepickerToggle implements AfterContentInit, OnChanges, OnDe /** Whether the toggle button is disabled. */ @Input() get disabled(): boolean { - return this._disabled === undefined ? this.datepicker.disabled : !!this._disabled; + if (this._disabled === undefined && this.datepicker) { + return this.datepicker.disabled; + } + + return !!this._disabled; } set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value); diff --git a/src/lib/datepicker/datepicker.spec.ts b/src/lib/datepicker/datepicker.spec.ts index 261a4a3a32d..c26c22afb0d 100644 --- a/src/lib/datepicker/datepicker.spec.ts +++ b/src/lib/datepicker/datepicker.spec.ts @@ -1538,6 +1538,15 @@ describe('MatDatepicker', () => { }); }); + describe('datepicker toggle without a datepicker', () => { + it('should not throw on init if toggle does not have a datepicker', () => { + expect(() => { + const fixture = createComponent(DatepickerToggleWithNoDatepicker, [MatNativeDateModule]); + fixture.detectChanges(); + }).not.toThrow(); + }); + }); + describe('popup positioning', () => { let fixture: ComponentFixture; let testComponent: StandardDatepicker; @@ -1963,7 +1972,6 @@ class DelayedDatepicker { } - @Component({ template: ` @@ -1974,3 +1982,11 @@ class DelayedDatepicker { `, }) class DatepickerWithTabindexOnToggle {} + + +@Component({ + template: ` + + `, +}) +class DatepickerToggleWithNoDatepicker {}