2017-08-10 12 views
1

Angular4を使用してフロントエンドを構築しています。 ユーザーがエラーのあるフォームを送信すると、エラーメッセージが表示されます。 、エラーを受信したときfield.invalidがtrueになる瞬間角2:FormGroup:カスタムエラーメッセージを表示する方法

<span class="error" *ngIf="field.invalid">Error: {{field.errors.error}} <br></span> 

:私はHTMLのエラーを表示する方法

// This code is run when a response from the server is received 
if ('error' in server_response) { 
    for (let key in server_response.error { 
     this.form.controls[key].setErrors({'error': true}); 
     let error_message_from_server = server_response.error[key]; 
    } 
} 

:現時点では

は、私のエラー処理は、次のようになります空の文字列にはfield.errors.errorが含まれています。

質問:field.errors.errorメッセージを設定するにはどうすればよいですか?このメッセージは、error_message_from_server

の文字列である必要があります.HTMLコードのif文を使用してこれを解決することはオプションではありません。潜在的なエラーの数は数百にあります。 HTMLレベルで利用できるようにするためのエラー文字列の場合は、あなたのコンポーネントレベルでそれを宣言する必要が

+0

を設定しようとしているあなたは、サーバーの応答の後にメッセージを表示するようにしたいですかフォームを送信する前に?テキストボックスの近くに何かを表示する必要がありますか、アラートは問題ありませんか? –

+0

申し訳ありませんが明確ではありません。私は私の質問を更新しました!エラーは、サーバーの応答の後に表示されるはずです。エラーメッセージはサーバーから受信されます。 – Vingtoft

答えて

1

this.form.controls[key].setErrors({'error': true}); //キーがエラー値であるブールない文字列

が文字列型の値

for (let key in server_response.error { 
    this.form.controls[key].setErrors({'error': erver_response.error[key]}); 
//Calling `setErrors` will also update the validity of the parent control. 
} 
0

error_message_from_server: string;

その後は、サーバーからのご回答の上、あなたはその文字列にメッセージを設定します。その後

// This code is run when a response from the server is received 
if ('error' in server_response) { 
    for (let key in server_response.error { 
     this.form.controls[key].setErrors({'error': true}); 
     error_message_from_server = server_response.error[key]; 
    } 
} 

あなたの要素に文字列をバインドします

<span class="error" *ngIf="field.invalid">Error: {{error_message_from_server}} <br></span>

+0

私は100以上の入力フィールドを持っており、すべてが潜在的なエラーメッセージをサーバーから受け取ることができます。 100以上のパブリック・ストリングを作成することは、特にAngularがすでに 'field.errors.error'を提供している場合には、本当に悪い解決策のように思えます。これが唯一の解決策であるかどうかを調査する必要があります。あなたのご意見ありがとうございます。 – Vingtoft

+0

問題はありません。私は100以上の入力があることを知らなかった。 – BogdanC