css - Hur man lägger till asterisk för 'obligatoriskt fält' till Angular reaktiva formulärfält
Jag utvecklar en applikation med ett reaktivt dynamiskt Angular-formulär. Formulärets fält kommer från en API-förfrågan och genereras dynamiskt.
Jag behöver verkligen lägga till en asterisk (*) för 'obligatoriskt fält' till mina formulärfält som är obligatoriska. Hur uppnår man detta?
Nedan är hur mina formulärfält ser ut.
<ng-container *ngIf="input1.type=='string'" [hidden]="False">
<div>
<mat-form-field>
<input matInput [formControlName]="input1.field_name" type="text" placeholder="{{input1.title}}">
</mat-form-field>
</div>
</ng-container>
Svar #1
Min lösning genom att generera en ny direktiv:
ng generate directive directive/mark-asterisk
Detta är fullständig kod för direktivet:
import {Directive, ElementRef, Input, OnInit} from '@angular/core';
import {FormGroup} from '@angular/forms';
@Directive({
selector: '[appMarkAsterisk]'
})
export class MarkAsteriskDirective implements OnInit {
@Input() formGroup: FormGroup;
@Input() controlName: string;
constructor(private elementRef: ElementRef) {
}
ngOnInit(): void {
const isRequired = this.formGroup.controls[this.controlName]?.errors?.required;
if (isRequired) {
this.elementRef.nativeElement.innerHTML = '*';
}else{
this.elementRef.nativeElement.innerHTML = '';
}
}
}
Nu i ditt HTML-formulär, använd det så här:
<label>Company name: <span appMarkAsterisk [formGroup]="formGroup" [controlName]="'companyName'"></span></label>
Svar #2
Bör fixas när Angular v13 släpps. https://github.com/angular/components/pull/23362
