Angular 没有得到;名称“;ElementRef对自定义属性的定义
我使用组件的“名称”表示条件(if、else)。 我正试图通过ElementRef的nativeElement属性获取它。 它可以很好地处理诸如(input、textarea)之类的元素,但是对于我的自定义组件,它的定义变得不明确Angular 没有得到;名称“;ElementRef对自定义属性的定义,angular,validation,components,directive,Angular,Validation,Components,Directive,我使用组件的“名称”表示条件(if、else)。 我正试图通过ElementRef的nativeElement属性获取它。 它可以很好地处理诸如(input、textarea)之类的元素,但是对于我的自定义组件,它的定义变得不明确 import { BasicPermissionService } from './../components/basicpermission.service'; import { Directive, forwardRef, Input, ElementRef }
import { BasicPermissionService } from './../components/basicpermission.service';
import { Directive, forwardRef, Input, ElementRef } from '@angular/core';
import { NG_VALIDATORS, AbstractControl, ValidatorFn, Validator, FormControl } from '@angular/forms';
@Directive({
selector: '[ifRequired][ngModel]',
providers: [
{ provide: NG_VALIDATORS, useExisting: ifRequiredValidator, multi: true }
]
})
export class ifRequiredValidator implements Validator {
validator: ValidatorFn;
constructor(private elem: ElementRef, private basicPermissionService: BasicPermissionService) {
this.validator = this.ifRequiredValidateFactory(elem.nativeElement.name);
}
validate(c: FormControl) {
return this.validator(c);
}
ifRequiredValidateFactory(control: string): ValidatorFn {
return (c: AbstractControl) => {
let isRequired = this.basicPermissionService.basicSectionIsRequired(control);
let isValid = false;
//if field is not required then do nothing
if (!isRequired) {
return null;
}
switch (true) {
case typeof c.value == "number":
isValid = c.value != null && c.value != 0;
break;
...
}
if (isValid) {
return null;
} else {
let validatioMessage = (control: string) => {
switch (control) {
case "name":
return "Mandatory field";
...
}
}
return {
ifRequired: {
valid: false,
message: validatioMessage(control)
}
};
}
}
}
}
它为我们工作
<input type="text" [(ngModel)]="basicInfo.Name" maxlength="200" placeholder="Name" name="name"
maxlength="2000" #name="ngModel"
ifRequired/>
但不是为了
<radio-select [IsMultiple]="true" [FieldType]="eventTypeField"
[SelectedIds]="basicInfo.EventTypeIds"
[(ngModel)]="basicInfo.EventTypeIds" [rname]="'EventType'" name="EventType"
#EventType="ngModel" ifRequired>
</radio-select>
如果我理解的问题是正确的,您正在尝试使用选择器“radio select”访问HTML中引用的组件。您可以使用以下代码: HTML:
组成部分:
@ViewChild('radioSelectComponent')radioSelectComponent:
现在,您可以使用变量“radioSelectComponent”引用组件,从而访问其所有成员。在指令类中为
名称添加输入属性
@Input() name: string;
然后尝试访问name属性,而不是通过ElementRef
对象访问属性
希望有帮助 请澄清并突出显示所需的部分并删除不必要的部分谢谢大家,我使用elem.nativeElement.attributes[“name”].value按属性获得了元素/组件名称。它对我有用。
@Input() name: string;