Angular 组件中的嵌套输入组
Nested input-group in Angular component
我在 angular 中创建了一个输入组件和一个日期选择器组件。我的输入组件基于类型参数创建正确的文本输入标签,数字 ecc。对于日期选择器,我创建了另一个托管 ngb-datepicker 的组件。
输入组件:
<div class="input-group input-group-sm">
<ng-container [ngSwitch]="type">
<ng-container *ngSwitchCase="'date'">
<app-date-picker [id]="object.id" [name]="object.id" [disabled]="disabled" (focus)="focus()" (focusout)="focusout()" [(ngModel)]="value"></app-date-picker>
</ng-container>
<div class="input-group-append" #ref>
<span *ngIf="unit" class="input-group-text" [ngClass]="{
'disabled': disabled,
'focused': focused}">{{unit}}</span>
<span class="input-group-text" [ngClass]="{'focused': focused}" *ngIf="!disabled && !readonly && !isValidationOff">
<app-quality-status #qualityStatus [objects]="[object]" [hide]="hideQualityStatus"></app-quality-status>
</span>
</div>
<div class="input-group-append" #ref>
<ng-content></ng-content>
</div>
日期选择器组件:
<div class="input-group input-group-sm">
<input class="form-control" name="dp" [(ngModel)]="selectedDate" ngbDatepicker #d="ngbDatepicker" (change)="onDateChange($event.target.value)" (dateSelect)="onDateSelect($event)" [disabled]="isDisabled ? 'disabled' : null">
<div class="input-group-append">
<button class="btn btn-input calendar fa fa-calendar" (click)="d.toggle()" type="button" [disabled]="isDisabled ? 'disabled' : null"></button>
</div>
</div>
使用这个嵌套的输入组 div 结果是我有一个不使用整个 space 而只使用一半的控件。如果我删除日期选择器组件中的输入组,问题是我的按钮与文本框不对齐。
我该如何解决这种问题?
2019 年 10 月 23 日更新
这是我的 stackblitz 示例
https://stackblitz.com/edit/angular-pbabtg
尝试将以下 css 添加到 hello.component
:host {
display: flex;
flex: auto;
}
向 <hello>
组件添加了 2 个内容
- class='form-control' 需要
input-group-append
style='padding:0px'
因为这个填充将输入放在外面一点
相关app.component.html:
<p>
Sample for boostrap nested input-group
</p>
<div class="row form-group form-group-sm">
<div class="col-md-12">
simple input box - works !
<div class="input-group input-group-sm">
<input type="number" class="form-control" placeholder="">
<div class="input-group-append" #ref>
<span class="input-group-text" >Unit</span>
<span class="input-group-text">
<span class="help">
Help
</span>
</span>
</div>
<div class="input-group-append" #ref>
<ng-content></ng-content>
</div>
</div>
</div>
<div class="col-md-12">
Only my custom component - works !
<hello name="{{ name }}"></hello>
</div>
<div class="col-md-12">
My custom component in a input-group - fails !
<div class="input-group input-group-sm">
<hello name="{{ name }}" class='form-control' style='padding:0px' ></hello>
<div class="input-group-append" #ref>
<span class="input-group-text" >Unit</span>
<span class="input-group-text">
<span class="help">
Help
</span>
</span>
</div>
<div class="input-group-append" #ref>
<ng-content></ng-content>
</div>
</div>
</div>
</div>
我在 angular 中创建了一个输入组件和一个日期选择器组件。我的输入组件基于类型参数创建正确的文本输入标签,数字 ecc。对于日期选择器,我创建了另一个托管 ngb-datepicker 的组件。 输入组件:
<div class="input-group input-group-sm">
<ng-container [ngSwitch]="type">
<ng-container *ngSwitchCase="'date'">
<app-date-picker [id]="object.id" [name]="object.id" [disabled]="disabled" (focus)="focus()" (focusout)="focusout()" [(ngModel)]="value"></app-date-picker>
</ng-container>
<div class="input-group-append" #ref>
<span *ngIf="unit" class="input-group-text" [ngClass]="{
'disabled': disabled,
'focused': focused}">{{unit}}</span>
<span class="input-group-text" [ngClass]="{'focused': focused}" *ngIf="!disabled && !readonly && !isValidationOff">
<app-quality-status #qualityStatus [objects]="[object]" [hide]="hideQualityStatus"></app-quality-status>
</span>
</div>
<div class="input-group-append" #ref>
<ng-content></ng-content>
</div>
日期选择器组件:
<div class="input-group input-group-sm">
<input class="form-control" name="dp" [(ngModel)]="selectedDate" ngbDatepicker #d="ngbDatepicker" (change)="onDateChange($event.target.value)" (dateSelect)="onDateSelect($event)" [disabled]="isDisabled ? 'disabled' : null">
<div class="input-group-append">
<button class="btn btn-input calendar fa fa-calendar" (click)="d.toggle()" type="button" [disabled]="isDisabled ? 'disabled' : null"></button>
</div>
</div>
使用这个嵌套的输入组 div 结果是我有一个不使用整个 space 而只使用一半的控件。如果我删除日期选择器组件中的输入组,问题是我的按钮与文本框不对齐。
我该如何解决这种问题?
2019 年 10 月 23 日更新
这是我的 stackblitz 示例 https://stackblitz.com/edit/angular-pbabtg
尝试将以下 css 添加到 hello.component
:host {
display: flex;
flex: auto;
}
向 <hello>
组件添加了 2 个内容
- class='form-control' 需要
input-group-append
style='padding:0px'
因为这个填充将输入放在外面一点
相关app.component.html:
<p>
Sample for boostrap nested input-group
</p>
<div class="row form-group form-group-sm">
<div class="col-md-12">
simple input box - works !
<div class="input-group input-group-sm">
<input type="number" class="form-control" placeholder="">
<div class="input-group-append" #ref>
<span class="input-group-text" >Unit</span>
<span class="input-group-text">
<span class="help">
Help
</span>
</span>
</div>
<div class="input-group-append" #ref>
<ng-content></ng-content>
</div>
</div>
</div>
<div class="col-md-12">
Only my custom component - works !
<hello name="{{ name }}"></hello>
</div>
<div class="col-md-12">
My custom component in a input-group - fails !
<div class="input-group input-group-sm">
<hello name="{{ name }}" class='form-control' style='padding:0px' ></hello>
<div class="input-group-append" #ref>
<span class="input-group-text" >Unit</span>
<span class="input-group-text">
<span class="help">
Help
</span>
</span>
</div>
<div class="input-group-append" #ref>
<ng-content></ng-content>
</div>
</div>
</div>
</div>