当前位置: 首页 > Web前端 > HTML5

使用Angular7开发一个Radio组件

时间:2023-04-04 23:49:37 HTML5

一、准备工作Angular7(以下简称ng7)与之前的版本有很大的不同。新建一个项目后,可以方便的创建一个库(简称lib)。什么是库?它是一个npm包的源码包。npm作为一个强大的包管理器,已经成为很多FEer分享智慧的法宝。本文主要介绍我写的一个radio组件。二、开发组件radio的过程1.使用ngcli新建工程并创建lib//installngclinpminstall-g@angular/cli//新建工程ngnewng-project//输入ng-project创建一个libng生成库radio2,生成结构如图,然后开始编写组件3.radio结构如下name属性要在组外保持一致且唯一。2.使用checked属性设置radio的选中状态。不要写成[attr.checked]-->{{item.name}}

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的发展和研究。