2017-04-19 8 views
1

カスタムngModelを使用してカスタムangle2コンポーネントを作成しています。ngOnChangesの後のカスタムngmodelバインディング

私が直面している問題は、ngModelが "@input"のような別のバインディングの後にバインドされることです。たとえば同じメソッドでは、ngModelの値と@inputの値を変更します。子コンポーネント内では、ngOnChangesで何らかの変更が発生した場合は処理する必要があります。

## https://plnkr.co/edit/U6eSZ6GJB6HvHADLyEG2?p=preview ## 
:しかし、それseesmが@inputの値が変更されているが、ngModelの値が古い値である

ここ

がplunkerのデモです(私はいくつかの検証のためにここに新しい値を取得する必要があります)

いくつかのアイデアを待っています。おかげさまで

+0

Plsはリンクを正しく設定し、コードの関連部分を質問に追加します。 –

+0

それはどのように動作するのですか。あなたは何をしようとしていますか?あなたの説明は明らかではありません。 – Aravind

+0

@Aravind、私の悪い英語のために申し訳ありません。アイデアは次のようなものです: 父親のコンポーネントには、2つのプロパティ "valueとmaxinum(" ngmodel "と" @Input "のmaxinum)の値があり、それらを子コンポーネントに渡します。その後、同じ時間に、父親のコンポーネントは子コンポーネントにそれらを渡すために変更されます。 2つのプロパティーを持つ子コンポーネント:valueとmaxinum。 ngOnChangeを使用して、子コドン内の変更を検出しました。しかし、ngOnChangeはmaxinum(@maxinum)が変更されたことを検出するだけで、値(Ngmodelの場合)はまだ古いものです。 Plz、plunkerのリンクを見てください。 – datpt154

答えて

1

変更を1か所に集約し、そこで検証を行うことができます。 モデルと最大の2つのサブジェクトを作成し、そこに変更をプッシュし、検証のためにオブザーバブルを結合します。

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

それはまだ同じ問題です。 フォームファザーコンポーネントは、同じメソッドで "maximum"と "value"を変更します。 (コードに基づいて) - 最初にngOnchangesを呼び出し、コードに基づいて "validateHere"メソッドを呼び出します。 - 次にwriteValueを呼び出してから、もう一度 "validateHere"メソッドを呼び出します(コードに基づいて) =>ここでprolemは:ngOnChangesが呼び出されると、valueはまだ古いです(writeValueメソッドが呼び出されるまでまだ更新されていません)。したがって、validateHereメソッドは、更新値が更新されずに実行されます。 – datpt154

関連する問題