css - Angular 父表单控件 Bootstrap / CSS 不适用于子组件
问题描述
我创建了一个在父级中使用的自动完成子组件。在父级中,当尝试使用 Bootstrap 表单控件应用验证时,它不会应用于此子组件 - 这是一个带有列表的输入框,尽管它会应用于其他非子控件。
子组件 HTML:
<div class="searching">
<input type="text" class="form-control" (input)="getFilteredData(inputBox.value);" class="form-control" [formControl]="inputBox">
<div id="search" tabindex="0" >
<ul class="suggestionList">
<li *ngFor="let result of filteredResults | async" (click)="onUserSelected(result)" >{{result[displayField1]}} | {{result[displayField2]}} {{result[displayField3]}}</li>
</ul>
</div>
</div>
父组件:
<app-auto-complete formControlName="requestorId"
[ngClass]="{ 'is-invalid': submitted &&
requestorId.errors }"></app-auto-complete>
<div *ngIf="submitted && f.requestorId.errors" class="invalid-feedback">
<div *ngIf="f.requestorId.errors.required">Requestor ID is required</div>
</div>
子 CSS:
.searching {
width: inherit;
position: relative;
}
.searching input {
margin: 0;
padding: 0;
width: 100%;
height: 30px;
}
.suggestionList {
background-color: #fff;
width: 100%;
position: absolute;
padding: 0;
left: 0;
z-index: 1000;
}
.suggestionList li {
list-style-type: none;
border: 1px solid #c5c5c5;
cursor: pointer;
left: 0;
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
text-align: left;
}
解决方案
我有几个workaraounds,所以我希望任何帮助。
如评论中所述,使用 ViewEncapsulation.None 在您的父组件装饰器中添加属性“封装”(与“选择器”等相同的级别)。请注意,这种方法会使父组件的样式渗透到整个应用程序,所以要小心这样做,除非您的父选择器非常具体,例如.my-specific-parent-selector-which-isnt-gonna-be-repeated
在子组件上使用@Input 属性传递验证布尔值,并根据传递的输入直接应用类。
向父类添加一个.parent-selector .is-invalid
选择器,然后在其后面添加一个::ng-deep .parent-selector .is-invalid
使特定样式渗透到子类的内容。请注意这种方法已被弃用,因此它可能会在未来停止工作(尽管不太可能)
注意:还请注意,您正在将is-invalid
类应用于选择器..如果您使用 chrome 网络浏览器进行检查,您会发现此选择器通常是您尝试添加类的不同元素...所以也许您最好的方法是使用输入
推荐阅读
- module - rust - 导入模块的麻烦
- list - 检查列表中与变量列表一致的所有单词
- java - 考虑到它进行身份验证而不是授权,Spring“授权”标头是否用词不当?
- python - 如何将 lambda 编写为 def 函数?
- ios - 在循环中添加多个项目 XCUITest TextField
- cgal - 在 Windows VS2019 上使用 CMake 构建 CGAL 失败
- r - R中将一种货币转换为另一种货币的函数
- c# - 使用 LINQ 使用 gRPC 列表对列表进行分组和映射
- javascript - 发送多个参数时删除“,”
- python - 使用 kubectl 或其他 ansible 模块(如命令、脚本)在 pod 中运行 shell 命令