[解決済み] AngularのReactive Formsでフォームコントロールに値を設定する方法
2023-07-30 07:11:11
質問
こんにちは、angularの初心者です。実は、私はあるサービスからデータを購読しようとしていて、そのデータを私のフォームコントロールに渡しています(例:編集フォームのようなものです)。
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators, FormArray, FormControl } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { QuestionService } from '../shared/question.service';
@Component({
selector: 'app-update-que',
templateUrl: './update-que.component.html',
styleUrls: ['./update-que.component.scss']
})
export class UpdateQueComponent implements OnInit {
questionsTypes = ['Text Type', 'Multiple choice', 'Single Select'];
selectedQuestionType: string = "";
question: any = {};
constructor(private route: ActivatedRoute, private router: Router,
private qService: QuestionService, private fb: FormBuilder) {
}
ngOnInit() {
this.getQuebyid();
}
getQuebyid(){
this.route.params.subscribe(params => {
this.qService.editQue([params['id']]).subscribe(res =>{
this.question = res;
});
});
}
editqueForm = this.fb.group({
user: [''],
questioning: ['', Validators.required],
questionType: ['', Validators.required],
options: new FormArray([])
})
setValue(){
this.editqueForm.setValue({user: this.question.user, questioning: this.question.questioning})
}
}
を使用すると
[(ngModule)]
を使用すると、正常に動作しますが、angular 7 バージョンで非推奨になるという警告が表示されます。
<textarea formControlName="questioning" [(ngModule)]="question.questioning" cols="70" rows="4"></textarea>
というわけで、以下のようにしてフォームコントロールに値を設定したのですが、要素にその値が表示されないのです。
setValue(){
this.editqueForm.setValue({user: this.question.user, questioning: this.question.questioning})
}
誰か私の反応フォームに値を設定する方法を教えてください。私に提案してください。
どのように解決するのですか?
Reactive Forms フォームコントロールの値の設定や更新は、patchValue と setValue の両方を使用して行うことができます。しかし、より良い方法は patchValue を使った方が良い場合もあります。
patchValue
は、フォームコントロールの値を更新/設定するために、すべてのコントロールをパラメータ内に指定する必要はありません。一方
setValue
では、すべてのフォームコントロールの値を入力する必要があり、パラメータ内に指定されていないコントロールがある場合は、エラーを返します。
このシナリオでは、更新されるのは
user
と
questioning
:
this.qService.editQue([params["id"]]).subscribe(res => {
this.question = res;
this.editqueForm.patchValue({
user: this.question.user,
questioning: this.question.questioning
});
});
編集:もしあなたが、ES6 の オブジェクトのデストラクチャリング をやりたくなったら、代わりにこれをやると面白いかもしれません。
const { user, questioning } = this.question;
this.editqueForm.patchValue({
user,
questioning
});
ジャジャーン!
関連
-
[解決済み] Angularで@Input()の値が変更されたときに検出する方法は?
-
[解決済み] プロパティ 'X' はプライベートであり、クラス 'xyzComponent' 内でのみアクセス可能です。
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] AngularでFormGroupに動的にaddControlを追加する
-
[解決済み] Angular2 formGroupに値を設定する
-
[解決済み] ExpressionChangedAfterItHasBeenCheckedError: チェックされた後に、式が変更されました。以前の値: 'undefined'
-
[解決済み] ngFor を使用して、Typescript Enum を文字列の配列として反復処理するにはどうすればよいですか?
-
[解決済み] Typescriptで文字列をbooleanに変換する方法 Angular 4
-
[解決済み] 新しいAngularでngSrcに相当するものは何ですか?
-
[解決済み] Angularアプリケーションに複数のHTTPインターセプターを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 角度2 ngfor 最初、最後、インデックスループ
-
[解決済み] AngularでEventEmitterに2つのパラメータを渡すには?
-
[解決済み] trackBy` と `ngFor` の使い方
-
[解決済み] プロパティ 'X' はプライベートであり、クラス 'xyzComponent' 内でのみアクセス可能です。
-
[解決済み] Angular2 bodyタグにクラスを追加する
-
[解決済み] 子ルートから親ルートに移動するにはどうしたらいいですか?
-
[解決済み] 角度の2つのスイッチケース値
-
[解決済み] Angular cli - ng serve時の自動リロードを無効にする方法
-
[解決済み] Angularアプリケーションに複数のHTTPインターセプターを追加する
-
[解決済み] Angular6でパスワードの検証を確認する [重複]。