@@ -141,6 +141,7 @@ export const MAT_FORM_FIELD_DEFAULT_OPTIONS =
141
141
export class MatFormField extends _MatFormFieldMixinBase
142
142
implements AfterContentInit , AfterContentChecked , AfterViewInit , CanColor {
143
143
private _labelOptions : LabelOptions ;
144
+ private _outlineGapCalculationNeeded = false ;
144
145
145
146
/** The form-field appearance style. */
146
147
@Input ( )
@@ -300,6 +301,9 @@ export class MatFormField extends _MatFormFieldMixinBase
300
301
301
302
ngAfterContentChecked ( ) {
302
303
this . _validateControlChild ( ) ;
304
+ if ( this . _outlineGapCalculationNeeded ) {
305
+ this . updateOutlineGap ( ) ;
306
+ }
303
307
}
304
308
305
309
ngAfterViewInit ( ) {
@@ -451,21 +455,24 @@ export class MatFormField extends _MatFormFieldMixinBase
451
455
return ;
452
456
}
453
457
458
+ if ( this . _platform && ! this . _platform . isBrowser ) {
459
+ // getBoundingClientRect isn't available on the server.
460
+ return ;
461
+ }
462
+ // If the element is not present in the DOM, the outline gap will need to be calculated
463
+ // the next time it is checked and in the DOM.
464
+ if ( ! document . documentElement . contains ( this . _elementRef . nativeElement ) ) {
465
+ this . _outlineGapCalculationNeeded = true ;
466
+ return ;
467
+ }
468
+
454
469
let startWidth = 0 ;
455
470
let gapWidth = 0 ;
456
471
const startEls = this . _connectionContainerRef . nativeElement . querySelectorAll < HTMLElement > (
457
472
'.mat-form-field-outline-start' ) ;
458
473
const gapEls = this . _connectionContainerRef . nativeElement . querySelectorAll < HTMLElement > (
459
474
'.mat-form-field-outline-gap' ) ;
460
475
if ( this . _label && this . _label . nativeElement . children . length ) {
461
- if ( this . _platform && ! this . _platform . isBrowser ) {
462
- // getBoundingClientRect isn't available on the server.
463
- return ;
464
- }
465
- if ( ! document . documentElement . contains ( this . _elementRef . nativeElement ) ) {
466
- return ;
467
- }
468
-
469
476
const containerStart = this . _getStartEnd (
470
477
this . _connectionContainerRef . nativeElement . getBoundingClientRect ( ) ) ;
471
478
const labelStart = this . _getStartEnd ( labelEl . children [ 0 ] . getBoundingClientRect ( ) ) ;
@@ -484,6 +491,8 @@ export class MatFormField extends _MatFormFieldMixinBase
484
491
for ( let i = 0 ; i < gapEls . length ; i ++ ) {
485
492
gapEls . item ( i ) . style . width = `${ gapWidth } px` ;
486
493
}
494
+
495
+ this . _outlineGapCalculationNeeded = false ;
487
496
}
488
497
489
498
/** Gets the start end of the rect considering the current directionality. */
0 commit comments