最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular使用ControlValueAccessor創(chuàng)建自定義表單控件

 更新時間:2019年03月08日 10:15:46   作者:h266094  
這篇文章主要介紹了Angular使用ControlValueAccessor創(chuàng)建自定義表單控件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在 Angular 自定義表單控件,有時你想要的輸入不是標(biāo)準的文本輸入、選擇或復(fù)選框。通過實現(xiàn)ControlValueAccessor 接口并將組件注冊為 NG_VALUE_ACCESSOR,您可以將自定義表單控件無縫地集成到模板驅(qū)動或響應(yīng)表單中,就像它是本地表單一樣!

ControlValueAccessor

ControlValueAccessor 是一個接口,充當(dāng)Angular API 和 DOM 元素之間的橋梁

ControlValueAccessor 是一個連接表單模型和視圖(DOM元素)的接口,自定義的表單控件必須實現(xiàn)這個接口,它的作用是:

  • 把 form 模型中值映射到視圖中
  • 當(dāng)視圖發(fā)生變化時,通知 form directives 或 form controls

Angular 引入這個接口的原因是,不同的輸入控件數(shù)據(jù)更新方式是不一樣的。例如,對于我們常用的文本輸入框來說,我們是設(shè)置它的 value 值,而對于復(fù)選框 (checkbox) 我們是設(shè)置它的 checked 屬性。實際上,不同類型的輸入控件都有一個 ControlValueAccessor,用來更新視圖

Angular 中常見的 ControlValueAccessor 有:

  • DefaultValueAccessor - 用于 text 和 textarea 類型的輸入控件
  • SelectControlValueAccessor - 用于 select 選擇控件
  • CheckboxControlValueAccessor - 用于 checkbox 復(fù)選控件
export interface ControlValueAccessor {
 writeValue(obj: any) : void
 registerOnChange(fn: any) : void
 registerOnTouched(fn: any) : void
}

writeValue(obj:any)是將表單模型中的值寫入視圖中。

writeValue(value: any): void {
 this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);
}

registerOnChange(fn:any)是一個方法,用于注冊在視圖中的某些內(nèi)容發(fā)生更改時應(yīng)調(diào)用的處理程序。它獲取一個函數(shù),告訴其他表單指令和表單控件更新其值。

registerOnChange(fn: (_: any) => void): void {
 this._onChange = fn;
}

registerOnTouched(fn:any)與registerOnChange()此類似,它專門為控件接收觸摸事件時注冊一個處理程序。

registerOnTouched(fn: any): void {
 this._onTouched = fn;
}

setDisabledState?(isDisabled: boolean): void; 是一個可選的方法,設(shè)置自定義表單的狀態(tài)

setDisabledState(isDisabled: boolean): void {
 this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
}

AbstractValueAccessor

我們可以把 ControlValueAccessor 中的方法寫在一個抽象類中,不同的組件可以實現(xiàn)這個基類

export abstract class AbstractValueAccessor implements ControlValueAccessor {
 
 private _value: any = '';
 
 get value(): any {
 return this._value;
 }

 set value(v: any) {
 if (v !== this._value) {
  this._value = v;
  this.onChange(v);
  this.onTouched();
 }
 }

 writeValue(value: any) {
 this._value = value;
 }

 onChange = (_) => {};
 onTouched = () => {};

 registerOnChange(fn: (_: any) => void): void {
 this.onChange = fn;
 }

 registerOnTouched(fn: () => void): void {
 this.onTouched = fn;
 }
}

export function MakeProvider(type: any): { provide: any, useExisting: any, multi: boolean} {
 return { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => type), multi: true };
}

Example

自定義一個 list 控件,可以選擇年級

在線預(yù)覽
git倉庫

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Angular2實現(xiàn)組件交互的方法分析

    Angular2實現(xiàn)組件交互的方法分析

    這篇文章主要介紹了Angular2實現(xiàn)組件交互的方法,結(jié)合實例形式總結(jié)分析了Angular2中組件交互的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2017-12-12
  • Angular outlet實現(xiàn)頁面布局示例詳解

    Angular outlet實現(xiàn)頁面布局示例詳解

    這篇文章主要為大家介紹了Angular outlet實現(xiàn)頁面布局示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 基于angular2 的 http服務(wù)封裝的實例代碼

    基于angular2 的 http服務(wù)封裝的實例代碼

    這篇文章主要介紹了基于angular2 的 http服務(wù)封裝實例代碼,
    2017-06-06
  • AngularJS入門教程引導(dǎo)程序

    AngularJS入門教程引導(dǎo)程序

    本文主要介紹AngularJS 引導(dǎo)程序,這里整理了相關(guān)資料及示例代碼,詳細講解了引導(dǎo)程序的知識要點,有興趣的小伙伴可以參考下
    2016-08-08
  • Angularjs渲染的 using 指令的星級評分系統(tǒng)示例

    Angularjs渲染的 using 指令的星級評分系統(tǒng)示例

    本篇文章主要介紹了Angularjs渲染的 using 指令的星級評分系統(tǒng)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • angular多選表單數(shù)據(jù)綁定的簡單嘗試

    angular多選表單數(shù)據(jù)綁定的簡單嘗試

    AngularJS中數(shù)據(jù)綁定相信大家應(yīng)該都不陌生了,這篇文章主要給大家介紹了關(guān)于angular多選表單數(shù)據(jù)綁定的簡單嘗試,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Ubuntu系統(tǒng)下Angularjs開發(fā)環(huán)境安裝

    Ubuntu系統(tǒng)下Angularjs開發(fā)環(huán)境安裝

    本文主要介紹 Ubuntu系統(tǒng)下Angularjs開發(fā)環(huán)境安裝,這里詳細介紹了安裝步驟和注意事項,有在Ubuntu 環(huán)境下開發(fā)的朋友可以參考下
    2016-09-09
  • angular8和ngrx8結(jié)合使用的步驟介紹

    angular8和ngrx8結(jié)合使用的步驟介紹

    這篇文章主要給大家介紹了關(guān)于angular8和ngrx8結(jié)合使用的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用angular8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • BootStrap+Angularjs+NgDialog實現(xiàn)模式對話框

    BootStrap+Angularjs+NgDialog實現(xiàn)模式對話框

    在完成一個后臺管理系統(tǒng)時,需要用表格顯示注冊用戶的信息。但是用戶地址太長了,不好顯示。所以想做一個模式對話框,點擊詳細地址按鈕時,彈出對話框,顯示地址。下面小編給大家分享下實現(xiàn)方法,一起看下吧
    2016-08-08
  • 詳解Angularjs 自定義指令中的數(shù)據(jù)綁定

    詳解Angularjs 自定義指令中的數(shù)據(jù)綁定

    這篇文章主要介紹了Angularjs 自定義指令中的數(shù)據(jù)綁定,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論

陆川县| 鹰潭市| 图们市| 绥滨县| 闵行区| 安平县| 林州市| 泌阳县| 栾城县| 汪清县| 平定县| 铁力市| 子长县| 仁怀市| 石屏县| 荥阳市| 灵山县| 云龙县| 措美县| 曲阜市| 东至县| 民丰县| 鹤山市| 信丰县| 印江| 南木林县| 江西省| 庄河市| 通城县| 田林县| 化隆| 怀安县| 巍山| 舒城县| 长治市| 铁岭县| 象山县| 思南县| 靖西县| 长武县| 富阳市|