こんにちは。エキサイトでデザイナーをしている齋藤です。
今回は、Alpine.jsで、input
要素などで入力された値を参照したい場合に有用なx-model
ディレクティブをご紹介します。
x-model
とは
x-model
はAlpine.jsのディレクティブの一つで、これを使用するとinput
要素に入力された値をAlpine.jsで扱えるデータとしてバインドできます。
基本的な使い方
まずは、基本的な使い方を単純な例でお示しします。
See the Pen x-modelの簡単な例 by AyumuSaito (@ayumusaito-excite) on CodePen.
<div x-data="{ inputedText: '' }"> <input x-model="inputedText" type="text" placeholder="文字を入力" /> <p>入力された値:<span x-text="inputedText"></span></p> </div>
x-data
でinputedText
を定義(空文字)input
要素に付与したx-model
を使用して入力された値を格納x-text
でinputedText
の値を参照して文字列としてリアルタイムに出力
といった処理の流れです。
どんな使い道があるか
先の例では単純に入力された値を出力するだけでしたが、以下のようにバリデーションを視覚的に表したい場合にも使えます。(CodePenにぜひ触れてみてください)
See the Pen Untitled by AyumuSaito (@ayumusaito-excite) on CodePen.
<div x-data="{ inputedHandleName: '' }"> <div> <label for="handlename">ハンドルネーム(4文字以上)</label> <input x-model="inputedHandleName" type="text" name="handlename" id="handlename" pattern=".{4,}" /> </div> <div x-show="inputedHandleName.length > 0 && inputedHandleName.length < 4"> <p>ハンドルネームは4文字以上の必要があります</p> </div> </div>
この例では、入力されたハンドルネームが4文字未満の場合は受け付けないバリデーションをinput
要素のpattern
属性を用いて設定しています。
しかし、通常はpattern
属性はsubmit時に結果を返すため、ユーザーは自分が入力した値が条件にあっているかを一度送信してみないと分かりません。
入力すべき項目が多いほど、バリデーションエラーがあった場合に修正すべき項目を探す手間が増えてします。結果として、体験を損ね、フォームから離脱してしまうということも考えられます。
そこで、x-model
を使用して入力値を条件と照らし合わせて、違反がある場合にはエラー要素を表示することで、submitせずともリアルタイムでバリデーションエラー伝えられます。
ただし、この方法は、UIのためのバリデーションチェックに過ぎませんので、意図しないデータを受け取らないようにpattern
属性と合わせて使用することを強く推奨します。
さいごに
今回は、Alpine.jsを使用している環境下で、input
要素などで入力された値を参照したい場合に有用なx-model
ディレクティブをご紹介しました。
Alpine.jsを使用している方の一助となれば幸いです。
ご精読ありがとうございました。