【Angular】テキストボックスが空の場合にエラーメッセージを表示する
テキストボックスに文字が入力されていない場合、すぐ下に「値が入力されていません」のエラーメッセージを表示する機能を作ります。
Angularが用意した機能として、データバインディングというものがあります。
TypeScriptセクション(以下、ts)で定義した変数を、テンプレート側(html)で参照できる機能です。
今回はデータバインディングではなく、テンプレート参照変数を使います。
テンプレート参照変数
Angularで作成したプロジェクトでは、HTMLセクションのことを「テンプレート」と呼びます。
AngularのHTMLテンプレートはAngularが用意した特別な構文を使用することで、条件分岐(if)・ループ(for)・変数定義などが実装できます。
これにより、アプリケーションのHTML表現を拡張できるというわけです。
今回取り上げるテンプレート参照変数は、すべてテンプレートの中で完結します。
テンプレート構文の中で変数を定義、変数に値を格納、変数の値を参照できるのです。
テンプレート参照変数はテンプレート内の要素に#変数名
を定義することで使用できます。
これを踏まえて、テキストボックスが空の場合にエラーメッセージを表示させる実装をします。
Angular公式のAngularがテンプレート変数に値を割り当てる方法に以下の説明があります。
変数が#var="ngModel"のように右側に名前を指定すると、変数は要素において一致するexportAs名をもつディレクティブやコンポーネントを参照します。
これを利用して、#var1="ngModel"
で定義と、テンプレート参照変数へのngModel
の割り当てを行います。
またngIf="var1.errors?.['required']
で参照しています。
テキストボックス(<input type="text">
)を必須項目required
にしておきます。
<div *ngIf="var1.errors?.['required']">
ここでテキストボックスのエラーを検知します。この*ngIf
の条件が満たされれば、エラーメッセージを表示する仕組みです。
このように<input>
要素の値を表示したい場合にはテンプレート参照変数を、ts側で値を加工する場合はデータバインディングを使用するなど、状況に応じて使い分けています。
注意
テンプレート参照変数は読み取り専用です。[(ngModel)]="var"
とすることはできません
テンプレート参照変数の命名ですが、"-"を使うと
Template parse errors: "-" is not allowed in reference names
こんな感じで怒られました。ハイフンは使用できないようです。
"_"(アンダーバー)は使えました。
また<input>
要素でngModel
を使う場合は、FormsModule
のインポートが必要となります。忘れずapp.module.tsに記載してください。
// app.modile.ts
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule } from "@angular/forms";
import { AppComponent } from "./app.component";
@NgModule({
declarations: [
AppComponent,
],
imports: [BrowserModule, FormsModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
おわりに
いつもこの本にお世話になってるんですが、慣れない言葉の連続で頭に入ってきません🐑💤💭
Angular公式はきっと賢い人が作ったのでしょう。それっぽい検索ワードで調べたのにわたしにもわかる解説が出てきませんでした。
素人は『 テンプレート駆動フォーム 』なんて専門用語わからないです。公式さんにはもっと初心者に優しくなってほしいものです。
* * *
参考: Angular 日本語ドキュメンテーション - テンプレート構文
Angular 日本語ドキュメンテーション - Building a template-driven
Angular 日本語ドキュメンテーション - テンプレート変数
- この記事を共有する
Webアプリケーションのプログラマ(フロントエンドエンジニア) Angular(TypeScript) / Next.js / Cypress を主に使用。
前職はピアノ技術者(調律師)。2017年からブログ「trog」を運営。
あざらしと音楽が好き。
trogではプッシュ通知機能を提供しています。
新しい記事が投稿されたタイミングで、お使いの端末にお知らせが届きます。
よければ通知設定ページから通知の許可をお願いします。