[Angular] Implement a custom form component by using control value accessor
We have a form component:
<label> <h3>Type</h3> <workout-type formControlName="type" ></workout-type> </label> form = this.fb.group({ name: ['', Validators.required], type: 'strength' }); constructor( private fb: FormBuilder ) {}
the 'type' FormControl will be a custom form element component which refers to 'workout-type' componet.
For the workout-type component:
import {ChangeDetectionStrategy, Component, forwardRef} from '@angular/core'; import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; // Register the control value accessor export const TYPE_CONTROL_ACCESSOR = { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => WorkoutTypeComponent) }; @Component({ selector: 'workout-type', providers: [TYPE_CONTROL_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, styleUrls: ['workout-type.component.scss'], template: ` <div class="workout-type"> <div *ngFor="let selector of selectors" [class.active]="selector === value" (click)="setSelected(selector)" class="workout-type__pane"> <img src="/img/{{selector}}.svg" alt="{{selector}}"> <p> {{selector}} </p> </div> </div> ` }) export class WorkoutTypeComponent implements ControlValueAccessor{ selectors = ['strength', 'endurance']; private onTouch: Function; private onModelChange: Function; private value: string; constructor() { } writeValue(value: string): void { this.value = value; } registerOnChange(fn: Function): void { this.onModelChange = fn; } registerOnTouched(fn: Function): void { this.onTouch = fn; } setSelected(value: string): void { this.value = value; this.onModelChange(value); this.onTouch(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-08-18 [RxJS] ReplaySubject
2016-08-18 [React Fundamentals] Composable Components