使用Angular7开发一个Radio组件
时间:2023-04-04 23:49:37
HTML5
4radio组件主要代码如下exportclassRadioGroupComponentimplementsControlValueAccessor{/*radio数组*/@Input()数据:Radio[]=[];/*radiotypenativeorbuttontype*/@Input()类型:字符串;/*名称标识符*/@Input()name:string=this.idSer.generate().replace(/-/g,'_');/*水平排列*/@Input()horizo??ntal:boolean;/*禁用*/@Input()禁用:布尔值;/*单选值*/@Input()value:any;constructor(privateidSer:IdService){}clickHandler(val:any){this.value=val;//改变控件的值this.controlChange(this.value);this.controlTouch(this.value);}writeValue(value:any):void{this.value=value;}registerOnChange(fn:Function):void{this.controlChange=fn}registerOnTouched(fn:Function):void{this.controlTouch=fn}privatecontrolChange:Function=()=>{}privatecontrolTouch:Function=()=>{}}说明:这个组件其实代码不多,但是需要注意的是我们从ng继承了一个接口ControlValueAccessor。这里我觉得值得一说。这是ng的一个formsAPI,可以方便的在nativeDOM和ngforms之间传递值。定义@Component({selector:'radiogroup',templateUrl:'./radiogroup.component.html',providers:[{provide:NG_VALUE_ACCESSOR,useExisting:forwardRef(()=>RadioGroupComponent),multi:true,}]})其中,有两个重要的方法需要重写。是的,它们是registerOnChange和registerOnTouched。这两个方法是在angular中定义和使用的。它们是formcontrol的updateOn(此属性可以自定义)在属性值更改或模糊时调用。所以,我们在重写这两个方法的时候,要注意是重写一个还是两个都重写。这个组件的两个方法都重写了,因为值变化的时机自定义为blur。3、这是我对radio组件的封装和开发。请给我一些指示。以后我会继续介绍Angular的发展和研究。