@@ -141,6 +141,7 @@ export const MAT_FORM_FIELD_DEFAULT_OPTIONS =
141141export class MatFormField extends _MatFormFieldMixinBase
142142 implements AfterContentInit , AfterContentChecked , AfterViewInit , CanColor {
143143 private _labelOptions : LabelOptions ;
144+ private _outlineGapCalculationNeeded = false ;
144145
145146 /** The form-field appearance style. */
146147 @Input ( )
@@ -300,6 +301,9 @@ export class MatFormField extends _MatFormFieldMixinBase
300301
301302 ngAfterContentChecked ( ) {
302303 this . _validateControlChild ( ) ;
304+ if ( this . _outlineGapCalculationNeeded ) {
305+ this . updateOutlineGap ( ) ;
306+ }
303307 }
304308
305309 ngAfterViewInit ( ) {
@@ -448,21 +452,24 @@ export class MatFormField extends _MatFormFieldMixinBase
448452 return ;
449453 }
450454
455+ if ( this . _platform && ! this . _platform . isBrowser ) {
456+ // getBoundingClientRect isn't available on the server.
457+ return ;
458+ }
459+ // If the element is not present in the DOM, the outline gap will need to be calculated
460+ // the next time it is checked and in the DOM.
461+ if ( document && ! document . documentElement . contains ( this . _elementRef . nativeElement ) ) {
462+ this . _outlineGapCalculationNeeded = true ;
463+ return ;
464+ }
465+
451466 let startWidth = 0 ;
452467 let gapWidth = 0 ;
453468 const startEls = this . _connectionContainerRef . nativeElement . querySelectorAll < HTMLElement > (
454469 '.mat-form-field-outline-start' ) ;
455470 const gapEls = this . _connectionContainerRef . nativeElement . querySelectorAll < HTMLElement > (
456471 '.mat-form-field-outline-gap' ) ;
457472 if ( this . _label && this . _label . nativeElement . children . length ) {
458- if ( this . _platform && ! this . _platform . isBrowser ) {
459- // getBoundingClientRect isn't available on the server.
460- return ;
461- }
462- if ( ! document . documentElement . contains ( this . _elementRef . nativeElement ) ) {
463- return ;
464- }
465-
466473 const containerStart = this . _getStartEnd (
467474 this . _connectionContainerRef . nativeElement . getBoundingClientRect ( ) ) ;
468475 const labelStart = this . _getStartEnd (
@@ -481,6 +488,8 @@ export class MatFormField extends _MatFormFieldMixinBase
481488 for ( let i = 0 ; i < gapEls . length ; i ++ ) {
482489 gapEls . item ( i ) . style . width = `${ gapWidth } px` ;
483490 }
491+
492+ this . _outlineGapCalculationNeeded = false ;
484493 }
485494
486495 /** Gets the start end of the rect considering the current directionality. */
0 commit comments