詳解Angular中實現(xiàn)自定義組件的雙向綁定的兩種方法_第1頁
詳解Angular中實現(xiàn)自定義組件的雙向綁定的兩種方法_第2頁
詳解Angular中實現(xiàn)自定義組件的雙向綁定的兩種方法_第3頁
詳解Angular中實現(xiàn)自定義組件的雙向綁定的兩種方法_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第詳解Angular中實現(xiàn)自定義組件的雙向綁定的兩種方法在Angular中,對于表單元素,通過[(ngModel)]即可以簡單地實現(xiàn)雙向綁定。對于自定義組件而言,希望實現(xiàn)同樣的效果可以怎么做呢?

1實現(xiàn)自定義組件的ngModel指令

如果希望自定義組件能夠具有與表單元素相同的ngModel效果,可以通過在組件內(nèi)實現(xiàn)ControlValueAccessor接口達到目的。

對于[(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ì)原理就是父子組件的事件綁定機制。簡單舉例如下。

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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論