В настоящее время я работаю с Angular 6 и последней версией Bootstrap v4.1 Теперь я пытаюсь создать реактивную форму со значками внутри форм ввода. Поскольку в начальной загрузке нет способа разместить значки слева от ввода - мне нужно взломать его самому. Но на самом деле это не работает. Давайте посмотрим поближе:
Когда нет ошибки msg apper - все выглядит нормально и, как и ожидалось:

Но когда форма изменяется и появляется сообщение, значок вырывается из формы:

html:
<form [formGroup] = "registerForm">
<div class = "form-group required">
<label class = "control-label">Email address:</label>
<input formControlName = "username" type = "email" class = "form-control">
<span *ngIf = "isFieldInvalid('username')" class = "form-control-feedback-invalid-username"><fa class = "danger" [name] = "'ban'"></fa></span>
<span *ngIf = "isFieldValid('username')" class = "form-control-feedback-valid-username"><fa class = "danger" [name] = "'check'"></fa></span>
<span *ngIf = "isFieldValidWithErrorType('username', 'required')" [ngClass] = "displayFieldCss('username', 'required')">Username has to be set.</span>
<span *ngIf = "isFieldValidWithErrorType('username', 'email')" [ngClass] = "displayFieldCss('username', 'email')">Email should have right pattern.</span>
</div>
<div class = "form-group required">
<label class = "control-label">Password:</label>
<input formControlName = "password" type = "password" class = "form-control">
<span *ngIf = "isFieldInvalid('password')" class = "form-control-feedback-invalid-password"><fa class = "danger" [name] = "'ban'"></fa></span>
<span *ngIf = "isFieldValid('password')" class = "form-control-feedback-valid-password"><fa class = "danger" [name] = "'check'"></fa></span>
<span *ngIf = "isFieldValidWithErrorType('password', 'required')" [ngClass] = "displayFieldCss('password', 'required')">Password has to be set.</span>
</div>
</form>
Важный класс - form-control-feedback-username/password. В css это выглядит так:
.form-control-feedback-invalid-username {
position: absolute;
z-index: 2;
right: 25px;
top: 77px;
color: red;
line-height: 34px;
pointer-events: none;
}
.form-control-feedback-valid-username {
position: absolute;
z-index: 2;
right: 25px;
top: 77px;
color: #35ef5f;
line-height: 34px;
pointer-events: none;
}






Методом проб и ошибок и советом @marco gomes я понял, как значок остается в строке:
.form-group {
position: relative;
.form-control-feedback-invalid-username {
position: absolute;
z-index: 2;
top: 40px;
right: 10px;
color: red;
pointer-events: none;
}
.form-control-feedback-valid-username {
position: absolute;
z-index: 2;
top: 40px;
right: 10px;
color: #35ef5f;
pointer-events: none;
}
.form-control-feedback-invalid-password {
position: absolute;
z-index: 2;
top: 40px;
right: 10px;
color: red;
pointer-events: none;
}
.form-control-feedback-valid-password {
position: absolute;
z-index: 2;
top: 40px;
right: 10px;
color: #35ef5f;
pointer-events: none;
}
}
текст ошибки вытягивает входы вниз, но поскольку значки имеют абсолютное положение, они остаются в том же положении .... вы можете либо сделать сообщение диапазона
position: absolute, либо добавить положение относительно.form-group