角父窗体控件Bootstrap / CSS不适用于子组件

时间:2019-03-20 18:31:31

标签: css angular bootstrap-4

我创建了一个在父级中使用的自动完成子级组件。在父级中,当尝试使用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;
      }

1 个答案:

答案 0 :(得分:0)

我有几个工作原理,希望对您有所帮助。

如注释中所述,在您的父组件装饰器中添加具有ViewEncapsulation.None的属性“ encapsulation”(与“ selector”相同的级别)。 请注意,这种方法会使父组件的样式渗透到整个应用程序中,因此请谨慎行事,除非您使父选择器非常具体,例如.my-specific-parent-selector-which-isnt-gonna-be-repeated

在子组件上使用@Input属性传递验证布尔值,并根据传递的Input直接应用该类。

向父级添加.parent-selector .is-invalid选择器,然后在其后添加::ng-deep .parent-selector .is-invalid,以使特定样式渗透子类。请谨慎使用此方法,但将来可能会停止工作(尽管不太可能)

注意: 还请注意,您正在将is-invalid类应用于选择器。.如果使用chrome Web浏览器进行检查,您会发现此选择器通常是与尝试添加类的元素不同的元素,因此也许最好的方法是使用输入