当前位置: 首页 > news >正文

翻译建设企业网站站长统计app进入网址新版小猪

翻译建设企业网站,站长统计app进入网址新版小猪,北京工信部网站备案查询,b2c常见平台举例ControlValueAccessor 是什么?为什么需要使用 ?下面本篇文章就来带大家了解Angular中的ControlValueAccessor组件接口,希望对大家有所帮助! ControlValueAccessor 是什么? 简单来说ControlValueAccessor是一个接口&am…

ControlValueAccessor 是什么?为什么需要使用 ?下面本篇文章就来带大家了解Angular中的ControlValueAccessor组件接口,希望对大家有所帮助!

 

 

ControlValueAccessor 是什么?

简单来说ControlValueAccessor是一个接口,它被用于在 Angular 的 FormControl 实例和原生 DOM 元素之间创建一个桥梁。其使用方式和OnInit类似,需要程序员在自定义组件里面实现相应的方法。

import {
ControlValueAccessor,
NG_VALUE_ACCESSOR
} from '@angular/forms';
@Component({selector: 'custom',templateUrl: './custom.component.html',styleUrls: ['./custom.component.less'],providers: [     {provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CustomComponent),multi: true     }   ]
})
export class CustomComponent implements ControlValueAccessor, OnInit, {…

 

为什么需要使用 ControlValueAccessor

有时,你可能需要创建自定义的表单元素,并希望它能和Angular的FormControl成功通信。这时你便需要ControlValueAccessor来实现这个目的。

比如:

this.myForm = new FormGroup({userName: new FormControl({value: '', disabled: false})
});

 

<form [formGroup]="myForm" (ngSubmit)="onSubmit()"><div class="form-group"><label>Name:<my-input formControlName="userName"></my-input></label></div><div class="form-group"><button type="submit">Submit</button></div>
</form>

深入理解

ControlValueAccessor的使用方法在Angular官网和很多的文章中都有介绍,但是它具体是如何起作用的呢?

Angular 需要一种通用机制来桥接原生/自定义表单控件和 formControl 指令,而这正是 ControlValueAccessor 干的事情。这个对象桥接原生表单控件和 formControl 指令,并同步两者的值。任何一个组件或指令都可以通过实现 ControlValueAccessor 接口并注册为 NG_VALUE_ACCESSOR,从而转变成 ControlValueAccessor 类型的对象。

其实原生表单控件也拥有类似于ControlValueAccessor的接口,比如:当 Angular 在组件模板中中遇到 input 或 textarea DOM 原生控件时,就会使用DefaultValueAccessor 指令

Accessor

Form Element

DefaultValueAccessor

input,textarea

CheckboxControlValueAccessor

input[type=checkbox]

NumberValueAccessor

input[type=number]

RadioControlValueAccessor

input[type=radio]

RangeValueAccessor

input[type=range]

SelectControlValueAccessor

select

SelectMultipleControlValueAccessor

select[multiple]

以上是Angular 为所有原生 DOM 表单元素创建的 Angular 表单控件,即内置ControlValueAccessor

ControlValueAccessor 接口定义了四个方法:

  • - writeValue(obj:any):将表单模型中的新值写入视图或DOM属性(如果需要)的方法,它将来自外部的数据写入到内部的数据模型。

  • - registerOnChange(fn:any):一种注册处理程序的方法,当视图中的某些内容发生更改时应调用该处理程序。它具有一个告诉其他表单指令和表单控件以更新其值的函数。通常在 registerOnChange 中需要保存该事件触发函数,在数据改变的时候,可以通过调用事件触发函数通知外部数据变了,同时可以将修改后的数据作为参数传递出去。

  • - registerOnTouched(fn: any):注册 onTouched 事件,基本同 registerOnChange ,只是该函数用于通知表单组件已经处于 touched 状态,改变绑定的 FormControl 的内部状态。

  • - setDisabledState(isDisabled: boolean):当调用 FormControl 变更状态的 API 时得表单状态变为 Disabled 时调用 setDisabledState() 方法,以通知自定义表单组件当前表单的读写状态。

formControl 指令使用 writeValue 方法设置原生表单控件的值;使用 registerOnChange 方法来注册由每次原生表单控件值更新时触发的回调函数,我们需要把更新的值传给这个回调函数,这样对应的 Angular 表单控件值也会更新;使用 registerOnTouched 方法来注册用户和控件交互时触发的回调。

 

 

formControl会调用名为setUpControl的函数,ControlValueAccessor的实例valueAccessor会被作为参数传入这个函数中。在setUpControl中,ControlValueAccessor的四个方法会在交互时被调用,以完成formControl和元素之间的通信。

拓展:

在使用ControlValueAccessor时需要一同引入NG_VALUE_ACCESSOR,它是使用InjectionToken 创建的可在 Provider 中使用的 Token。我们在编写自己的项目时一般不需要用到InjectionToken,但是在一个框架或者第三方的插件中,它就变得十分有必要了。

export const NG_VALUE_ACCESSOR =new InjectionToken<ReadonlyArray<ControlValueAccessor>>('NgValueAccessor');

 试想当我使用依赖注入的功能时,我需要将我创建的依赖注册进组件中。这时我就需要一个令牌,如果我使用一个字符串作为令牌就有可能会造成重复,相同的令牌会导致后面的覆盖前面的。所以需要一个Token作为一个唯一值来防止这种冲突。

providers: [{ provide: TOKEN, useValue: … }]

 以上就是Angular学习之ControlValueAccessor接口详解的详细内容,请大神们多多提点,共同进步!

http://www.hengruixuexiao.com/news/178.html

相关文章:

  • 网站建设公司上海做网站公司微信运营
  • 手机网站开发需要哪些人网页推广链接怎么做
  • 怎样做网站静态seo智能优化公司
  • wordpress主题插件免费下载百中搜优化
  • 网站建设技术流程百度关键词排名快速排名
  • 观澜做网站公司关键词上首页的有效方法
  • 建设网站开发方案视频互联网推广选择隐迅推
  • 内蒙古建设工程造价管理网站最新重大新闻
  • 长沙正规网站制作公司知名的建站公司
  • 怎样用vs做简单网站网页模板下载
  • 做网站哪里的服务器速度快产品营销方案案例范文
  • 黑龙江省建设监理协会网站网络营销师
  • wordpress建站有什么好处最新国际新闻50条简短
  • 手机网站模板安装方法百度竞价规则
  • 定制网站开发流程竞价外包托管费用
  • 电商网站建设与运营专业百度竞价排名模式
  • 做爰午夜福利全过程视频网站google play 安卓下载
  • 采集文章留在网站刚刚北京传来重大消息
  • 哪个餐饮店微网站做的有特色seo入门培训学多久
  • 网站建设的价值石家庄新闻头条新闻最新今天
  • 网站建设常用软件百度招聘电话
  • 设计必知的设计网站 039优秀网页设计公司
  • 网站域名如何备案百度识图 上传图片
  • 做动态网站用什么语言优帮云排名自动扣费
  • 临漳县web网站建设搜索引擎登录入口
  • 网站上的代码网页怎么做的搜索引擎推广一般包括哪些
  • 网站制作培训课程百度爱采购推广怎么收费
  • 一个虚拟主机做2个网站东莞网站建设推广平台
  • 建行移动门户网站首页深圳企业黄页网
  • 精准引流怎么推广顺德搜索seo网络推广