質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

Q&A

1回答

1365閲覧

Angular ラジオボタンの切り替えを行なった際にローカルストレージに用意した値を保存したい

mgpg

総合スコア0

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

0グッド

0クリップ

投稿2021/05/07 06:54

前提・実現したいこと

Angulerにおいてラジオボタンを用意し、切り替えをした際に用意した値をローカルストレージに保存したいと考えています。具体的には下記のようなイメージです。

HTML

<form [formGroup]="searchForm" novalidate> <h2 class="font w6 size-slg title">title</h2> <div class="radio-wrap"> <ion-radio-group [formControlName]="'selected'"> <ion-item class="flex-item" lines="none"> <ion-label>YES</ion-label> <ion-radio slot="start" value="YES" [(ngModel)]="YESORNO"></ion-radio> </ion-item> <ion-item class="flex-item" lines="none"> <ion-label>NO</ion-label> <ion-radio slot="start" value="NO" [(ngModel)]="YESORNO"></ion-radio> </ion-item> </ion-radio-group> </div> <ion-button class="button" (click)="choose()">選択 </ion-button> </form>

tsファイル

export class ChoosePage implements OnInit { builder = new FormBuilder(); searchForm = this.builder.group({ choose: this.builder.control('', Validators.required) }); constructor( ) {} ngOnInit() { this.searchForm.value.choose = localStorage.getItem('selected'); } setTimeZone() { localStorage.removeItem('timezone'); localStorage.setItem('timezone', '**ここにview側のvalueのYESまたはNOをバインドさせてローカルストレージの登録したい**'); }

Angulerが不得手なためご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

export class ChoosePage implements OnInit, OnDestroy { private _unsubscribe$ = new Subject<void>(); builder = new FormBuilder(); searchForm = this.builder.group({ choose: this.builder.control('', Validators.required) }); constructor( ) {} ngOnInit() { this.searchForm.get('choose').setValue(localStorage.getItem('selected')); // this.searchForm.value.choose = localStorage.getItem('selected'); this.searchForm.get('choose').valueChanges .pipe(takeUntil(this._unsubscribe$)) .subscribe((v) => { this.setTimeZone(v); }); } setTimeZone(status: 'YES' | 'NO') { localStorage.removeItem('timezone'); localStorage.setItem('timezone', status); } ngOnDestroy(): void { this._unsubscribe$.next() }

FormControlでFormの制御を行う場合は、基本的にngModelは不要です。
TS側で値が変化したときのイベントをvalueChangesで購読することができます。
これはHot Observable(=自動で完了しない)なので、ngOnDestroy時に明示的に購読を破棄する必要があります。(のでtakeUntil()を使用します)

フォームの初期値の設定は、<FormControl>.valueを直接変更するのではなく、setValue()またはpatchValue()を用いてください。(valueはgetterなので)

投稿2021/05/12 01:28

kaito3desuyo

総合スコア143

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問