@@ -113,7 +113,90 @@ public loginForm = this.builder.group({
113113
114114### テンプレート駆動フォーム
115115
116- #### WIP
116+ #### 使用方法
117+
118+ html側、コンポーネント側双方での準備が必須。
119+
120+ - ① コンポーネントではデータバインドに使用する フォームのモデルを作成する
121+ - ② ngForm を指定し、コンポーネントとリンクさせる, ngModel で コンポーネントで用意したモデルと関連付ける
122+ - ③ viewChild を使用してformとしてフォームの入力値を参照、
123+
124+ ``` typescript
125+ // html 要素の参照
126+ @ViewChild (' form' ) form : NgForm ;
127+ ```
128+
129+ ``` html
130+ <!-- ① using ngForm to link form with component -->
131+ <form class =" form" #form =" ngForm" (ngSubmit) =" submit()" >
132+ <!-- ② using ngModel to link value with component model -->
133+ <input
134+ type =" email"
135+ placeholder =" mail"
136+ [(ngModel)] =" model.mail"
137+ name =" mail"
138+ #mail =" ngModel"
139+ required
140+ email
141+ />
142+ </form >
143+ ```
144+
145+ #### form のデータ更新
146+
147+ - ngModel で指定したモデル経由で値を更新することができる
148+
149+ ``` typescript
150+ // model の値を更新
151+ this .model .mail = ' example@example.com' ;
152+ this .model .password = ' invalid-password' ;
153+ ```
154+
155+ #### form の validate
156+
157+ - バインドした form 経由で validate をかけたいフォーム要素の errors を確認する
158+ - 以下で説明する required,email を指定していた場合はその要素の errors を確認することで validateの結果を取得できる
159+
160+ - input 要素に required, email を追加する
161+ - required を追加することで必須要素であることをformに伝えることができる
162+ - email を追加することで email のパターンマッチングを行ってくれる
163+
164+ ``` typescript
165+ // 指定していた form要素を参照し、 付与したhtmlのvalidate結果を取得する(required,email)
166+ get emailInvalid () {
167+ return this .form ?.form ?.controls ?.mail ?.errors ?.required ? true : false ;
168+ }
169+ get emailPatternInvalid () {
170+ return this .form ?.form ?.controls ?.mail ?.errors ?.email ? true : false ;
171+ }
172+
173+ // password の validate 結果の取得
174+ get passwordInvalid () {
175+ return this .form ?.form ?.controls ?.password ?.errors ?.required ? true : false ;
176+ }
177+
178+ ```
179+
180+ ``` html
181+ <!-- html の input要素に required,email を追加 -->
182+ <input
183+ type =" email"
184+ placeholder =" mail"
185+ [(ngModel)] =" model.mail"
186+ name =" mail"
187+ #mail =" ngModel"
188+ required
189+ email
190+ />
191+ <input
192+ type =" password"
193+ placeholder =" password"
194+ [(ngModel)] =" model.password"
195+ name =" password"
196+ #password =" ngModel"
197+ required
198+ />
199+ ```
117200
118201## 起動
119202
0 commit comments