下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第詳解Angular中實現(xiàn)自定義組件的雙向綁定的兩種方法在Angular中,對于表單元素,通過[(ngModel)]即可以簡單地實現(xiàn)雙向綁定。對于自定義組件而言,希望實現(xiàn)同樣的效果可以怎么做呢?
1實現(xiàn)自定義組件的ngModel指令
如果希望自定義組件能夠具有與表單元素相同的ngModel效果,可以通過在組件內(nèi)實現(xiàn)ControlValueAccessor接口達(dá)到目的。
對于[(ngModel)],需要至少實現(xiàn)該接口的如下方法:
interfaceControlValueAccessor{
writeValue(obj:any):void
registerOnChange(fn:any):void
registerOnTouched(fn:any):void
最簡單的核心實現(xiàn)示例參考如下。
import{ControlValueAccessor}from'@angular/forms/src/directives';
import{Component,forwardRef,Input}from'@angular/core';
import{NG_VALUE_ACCESSOR}from'@angular/forms';
@Component({
selector:'custom-input',
template:`input[(ngModel)]="value"/`,
providers:[
provide:NG_VALUE_ACCESSOR,
useExisting:forwardRef(()=UnionInputComponent),
multi:true
exportclassCustomInputComponentimplementsControlValueAccessor{
constructor(){}
privateinnerValue:any='';
privateonTouchedCallback:()=void=function(){};
privateonChangeCallback:(_:any)=void=function(){};
getvalue():any{
returnthis.innerValue;
setvalue(v:any){
if(v!==this.innerValue){
this.innerValue=v;
this.onChangeCallback(v);
*modelview-viewvalue
writeValue(value:any){
if(value!==this.innerValue){
this.innerValue=value;
*viewvalue-modelvalue
registerOnChange(fn:any){
this.onChangeCallback=fn;
registerOnTouched(fn:any){
this.onTouchedCallback=fn;
2使用get/set關(guān)鍵字實現(xiàn)父子組件的雙向綁定
其實實現(xiàn)雙向綁定內(nèi)部的本質(zhì)原理就是父子組件的事件綁定機(jī)制。簡單舉例如下。
2.1自定義子組件定義
import{Input,Output,Component,EventEmitter}from'@angular/core';
@Component({
selector:'custom-input',
template:`input[(ngModel)]="innerValue"/`,
exportclassCustomInputComponent{
innerValue;
@Input()
gettwoWayModel(){
returnthis.innerValue;
settwoWayModel(val){
this.innerValue=val;
this.twoWayModelChange.emit(this.innerValue);
@Output()twoWayModelChange:EventEmitterstring=newEventEmitter/stringstring
2.2使用自定義組件
在需要使用組件的地方,通過[(twoWayModel)]即可實現(xiàn)雙向綁定的效果。
import{Input,Output}from'@angular/core';
import{Component,forwardRef,Input}from'@angular/core';
@Component({
selector:'custom-input',
template:`custom-input[(twoWayModel)]="inputValue"(twoWayModelChange)="onInputValueChange($event)"/custom`
exportclassabcComponent{
inputValue;
onInputVa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重合同守信用規(guī)范化制度
- 規(guī)范化會計檔案管理制度
- 為規(guī)范學(xué)校管理以制度
- 建設(shè)工程審查制度規(guī)范
- 避雷塔管理制度規(guī)范標(biāo)準(zhǔn)
- 醫(yī)院藥房規(guī)范發(fā)藥制度
- 兒童行為規(guī)范管理制度
- 公務(wù)用車規(guī)范維修制度
- 臺面銀器管理制度規(guī)范
- 門房管理制度及流程規(guī)范
- 面板堆石壩面板滑模結(jié)構(gòu)設(shè)計
- 無人機(jī)裝調(diào)檢修工培訓(xùn)計劃及大綱
- 國家開放大學(xué)《森林保護(hù)》形考任務(wù)1-4參考答案
- GB 31604.1-2023食品安全國家標(biāo)準(zhǔn)食品接觸材料及制品遷移試驗通則
- GB/T 3683-2023橡膠軟管及軟管組合件油基或水基流體適用的鋼絲編織增強(qiáng)液壓型規(guī)范
- 殯葬服務(wù)心得體會 殯儀館工作心得體會
- 電力線路維護(hù)檢修規(guī)程
- 春よ、來い(春天來了)高木綾子演奏長笛曲譜鋼琴伴奏
- ARJ21機(jī)型理論知識考試題庫(匯總版)
- GB/T 4623-2014環(huán)形混凝土電桿
- GB/T 32065.4-2015海洋儀器環(huán)境試驗方法第4部分:高溫試驗
評論
0/150
提交評論