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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

2722閲覧

プルダウンメニューから値を取得する事ができない

inukujira

総合スコア130

Angular

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/08/14 13:31

すみません。教えてください。
angularにてユーザーフォームを作成しています。

フォーム項目の"年齢"を選択した後、submit先のshow()関数にて結果を受け取りコンソール出力しているのですが
もっと簡単にソースを実装したいと考えています。

現在は以下のコードで実装しています。

■ app.component.ts

Typescript

1...(省略) 2 // 変数宣言:プルダウンメニュー表示用 3 ages: Number[] = [ 4 21, 5 22, 6 23, 7 ]; 8 9 // 変数宣言:コンソール結果用 10 age: Number; 11 12 // 関数:コンソール表示用 13 show() { 14 console.log(this.age); 15 } 16...(省略)

■ app.component.html

html

1<form #myForm="ngForm" (ngSubmit)="show()"> 2 年齢: 3 <select name="age" [(ngModel)]="age" required> 4  <option disabled="disabled" [value]="undefined">選択</option> 5  <option *ngFor="let item of ages" [value]="item" [disabled]="item.disabled" [selected]="item.value === age">{{item}}</option> 6 </select><br> 7 <input type="submit" value="送信" [disabled]="myForm.invalid"> 8</form>

■ app.component.css

css

1select{ 2 padding:10px; 3 font-size:1em; 4 color:#aaa; 5 border:solid 1px #ccc; 6 margin:0 0 10px; 7 border-radius: 5px; 8} 9.age { 10 width:100px; 11}

■ 実行結果
イメージ説明

教えて頂きたいのは、この処理を以下のようなコードで実装したいと考えています。

■ app.component.ts

Typescript

1...(省略) 2 // 変数宣言:プルダウンメニュー表示用 3 ages: Number[] = [ 4 21, 5 22, 6 23, 7 ]; 8 // 関数:コンソール表示用 9 show(i: Number) { 10 console.log(this.age[i]); 11 } 12...(省略)

受け取りのためだけに新たにage変数を利用せずに、既存の配列変数から要素を取り出したいんですが
どうにもshow()関数に配列数のiを引き渡すことが出来ずに何時間も手づまり状態です…。
試したことは、*ngForディレクティブに"index as i"を指定したんですが
そこから先、そのiをshow()関数に渡せず...。

どのようにすればshow()関数にiを引き渡す事が出来るでしょうか?
申し訳ありませんが、どなたかご教示頂ければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

もっとシンプルな方法があるかもしれませんしコードの量は減らないかもしれませんが、公式ドキュメントを参考にFormBuilderを使用するかFormControlを使用するのが王道かと思います。

参考
https://angular.jp/start/forms

https://angular.jp/guide/forms-overview

追記:
雑な解答をしてしまい申し訳なかったので実装してみました。

https://stackblitz.com/edit/angular-fz9ymg?file=app%2Fform-field-overview-example.ts

typescript

1export class FormFieldOverviewExample { 2 3myGroup = new FormGroup({ 4age: new FormControl() 5}); 6 // 変数宣言:プルダウンメニュー表示用 7 ages: Number[] = [ 8 21, 9 22, 10 23, 11 ]; 12 // 関数:コンソール表示用 13 show(i) { 14 console.log(i); 15 } 16}

html

1 <form [formGroup]="myGroup" (ngSubmit)="show(myGroup.value.age)"> 2 <mat-form-field> 3 <mat-select [formControlName]="'age'"> 4 <mat-option *ngFor="let item of ages" value="{{item}}">{{item}}</mat-option> 5 </mat-select> 6 </mat-form-field> 7 <input type="submit" value="送信"> 8 </form>

投稿2019/08/14 13:51

編集2019/08/14 15:33
s14pes

総合スコア55

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

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

inukujira

2019/08/14 14:03

回答ありがとうございます。 残念ながら本件の解決につながる内容を見つける事ができませんでした…。
s14pes

2019/08/14 15:34

追記いたしました。
inukujira

2019/08/14 16:31

s14pesさん、わざわざ実装して頂きありがとうございました。 ただ私の環境ではうまく動かず、おそらく読み込みモジュール関連かと思いますが環境が足りないようです。 なるべく簡単な実装を思い描いてたんですがなかなか難しいようですね…。
inukujira

2019/08/15 04:36 編集

s14pesさん、ありがとうございます。 回答を元に1つずつ整理して実装する事が出来ました! FormControlめちゃくちゃ便利ですね! 感謝です!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問