Skip to content

Commit d46964c

Browse files
committed
fix(form-field): allow for measuring outline gap when label is not in dom
1 parent 9f06502 commit d46964c

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

src/lib/form-field/form-field.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ export const MAT_FORM_FIELD_DEFAULT_OPTIONS =
141141
export 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.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

Comments
 (0)