我有一个自定义表单组件,我会动态应用它 .
import { Component, forwardRef, Injector } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { BaseInput } from './base-input';
@Component({
selector: 'app-text-control',
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TextControlComponent),
multi: true
}],
styles: [':host { display: inline-block }'],
template: `
<ng-container *ngIf="ctx.isEditing">
<input class="form-control"
[value]="value"
(change)="value=$event.target.value" (keyup)="value=$event.target.value" >
</ng-container>
<ng-container *ngIf="!ctx.isEditing">
{{value}}
</ng-container>
`
})
export class TextControlComponent extends BaseInput<string> implements ControlValueAccessor {
constructor(injector: Injector) {
super(injector);
}
}
问题是当我将引导类应用于html中的组件时,容器获取应用的类而不是子html元素
<app-text-control formControlName="test" [ngClass]="{
'is-valid' : test.valid && (test.dirty || test.touched) ,
'is-invalid' : test.invalid && (test.dirty || test.touched)
}" ></app-text-control>
class is-valid或is-invalid应用于app-text-control容器html而不是内部输入控件 . 有没有办法将父类中设置的ng-class类传播给子html?
我希望能够动态地将类附加到我的自定义组件内的控件上的html,如果可能的话,理想情况下使用ngClass指令 . 我是否必须为自己的父自定义表单控件编写自定义属性(例如[myNgClass] = ....)?
1 回答
不确定这是最好的方法,但你可以这样做:
在子组件内部,您将拥有
isvalid
和isinvalid
属性,可以与ngClass
一起使用 .