Bootstrap 4中form-control-feedback图标使用问题求助
嘿,我懂你遇到的麻烦了!Bootstrap 4对表单验证的样式体系做了彻底重构,你还在沿用Bootstrap 3那套has-error has-feedback的旧类,这就是为啥预期效果出不来的核心原因。结合你用的Angular 5.2.9和FontAwesome,我给你整理了两种可行的解决方案:
方案1:用绝对定位实现输入框内图标(自定义程度高)
这种方式适合你想自由控制图标位置的场景,只需要给表单组加相对定位,再给图标加绝对定位就行:
<form [formGroup]="form" (ngSubmit)="onSubmit()" novalidate> <!-- 给form-group加position-relative,让图标能相对于输入框定位 --> <div class="form-group position-relative"> <label for="title">Quiz title:</label> <input type="text" id="title" class="form-control" formControlName="Title" <!-- 只有当控件无效且已被触碰时,才添加is-invalid类触发Bootstrap错误样式 --> [ngClass]="{'is-invalid': form.get('Title').invalid && form.get('Title').touched}" > <!-- FontAwesome错误图标,通过ngIf控制显示时机 --> <i class="fas fa-exclamation-circle position-absolute" style="top: 38px; right: 15px; color: #dc3545;" *ngIf="form.get('Title').invalid && form.get('Title').touched"></i> <!-- Bootstrap原生的错误提示文本 --> <div class="invalid-feedback" *ngIf="form.get('Title').errors?.required"> Quiz title is required! </div> </div> <button type="submit" class="btn btn-primary">Submit</button> </form>
方案2:用Bootstrap Input Group组件(更贴合Bootstrap规范)
如果你不想写自定义样式,推荐用Bootstrap自带的input-group组件,它能自动把图标和输入框整合在一起:
<form [formGroup]="form" (ngSubmit)="onSubmit()" novalidate> <div class="form-group"> <label for="title">Quiz title:</label> <!-- 用input-group包裹输入框和图标 --> <div class="input-group"> <input type="text" id="title" class="form-control" formControlName="Title" [ngClass]="{'is-invalid': form.get('Title').invalid && form.get('Title').touched}" > <!-- 错误图标容器,只有验证不通过时才显示 --> <div class="input-group-append" *ngIf="form.get('Title').invalid && form.get('Title').touched"> <span class="input-group-text bg-transparent border-left-0 text-danger"> <i class="fas fa-exclamation-circle"></i> </span> </div> </div> <div class="invalid-feedback" *ngIf="form.get('Title').errors?.required"> Quiz title is required! </div> </div> <button type="submit" class="btn btn-primary">Submit</button> </form>
关键注意点:
- Bootstrap 4的验证类变化:旧的
has-error、has-feedback、form-control-feedback已经被移除,现在用is-invalid标记无效输入框,invalid-feedback显示错误文本。 - Angular表单状态控制:加上
form.get('Title').touched(或dirty)的判断,避免页面刚加载就显示错误提示,提升用户体验。 - FontAwesome图标整合:确保你已经正确引入FontAwesome的CSS文件,不然图标会显示不出来。
内容的提问来源于stack exchange,提问作者blfuentes
相关产品推荐
相关产品推荐

