2017-04-19 88 views
1

我正在編寫使用自定義ngModel的自定義angular2組件。ngOnChanges後自定義ngmodel綁定

我面臨的問題是ngModel將綁定像「@input」之類的另一個綁定。例如,在同一個方法中,我更改ngModel的值和@input的值。在子組件內部,如果在ngOnChanges發生任何更改,我需要處理。但是,對於seesm的@input值已更改,但ngModel值仍然是舊值(我需要在這裏得到新的價值了一些驗證)

這裏是plunker演示:

## https://plnkr.co/edit/U6eSZ6GJB6HvHADLyEG2?p=preview ## 

等待一些想法。 謝謝。

+0

請設置鏈接權限,並將相關部分的代碼添加到問題中。 –

+0

這就是它的工作原理。你在嘗試什麼?你的解釋不清楚。 – Aravind

+0

@Aravind,對不起我的英文不好。這個想法是這樣的: 父組件有2個屬性「value和maxinum(」ngmodel「的值和maxinum的」@Input「)」,並將它們傳遞給子組件。之後,父組件將更改爲將它們傳遞給子組件。 具有2個屬性的子組件:value和maxinum。 我用ngOnChange來檢測子組件內部的更改。但是ngOnChange只是檢測到maxinum(@maxinum)已經改變,但是(對於Ngmodel)的值仍然是舊的。 Plz,在plunker鏈接裏面看看。 – datpt154

回答

1

您可以將更改集中在一個地方並在那裏進行驗證。 爲模型和最大值創建兩個主題,在那裏推送更改並組合可視化驗證。

ngOnChanges(changes: SimpleChanges) { 
     alert("current model " + this.value + "--- current maxinum " + changes.maximum.currentValue); 
     this.maximum$.next(this.maximum); 
    } 

    //From ControlValueAccessor interface 
    writeValue(value: any) { 
    if (value !== this.innerValue) { 
     this.model$.next(value); 
     this.innerValue = value; 
    } 
    } 

    Observable.combineLatest(this.maximum$, this.model$). 
    subscribe(validateHere) 
+0

這仍然是同樣的問題。 表單父組件,我用相同的方法改變「最大值」和「值」。因此角度過程的流程爲: - 先調用ngOnchanges,然後調用「validateHere」方法(根據您的代碼) - 再次調用writeValue,然後再次調用「validateHere」方法(根據您的代碼) =>這裏的問題是:當調用ngOnChanges時,值仍舊是舊的(尚未更新,直到調用writeValue方法)。因此,validateHere方法將以更新值運行。 – datpt154