上一章經過用戶註冊講解了響應式表單ReactiveForm,這章主要講解如何向服務器提交註冊數據並導航到好友信息模塊。bootstrap
向服務器提交信息是經過模板中<form [formGroup]="registForm" (ngSubmit)="onSubmit()" novalidate>
標籤中的(ngSubmit)="onSubmit()進行提交的。在填寫好正確的信息後,按鈕<button type="submit" class="btn btn-primary" [disabled]="registForm.invalid">Submit</button>
會變爲可用狀態,點擊按鈕後,onSubmit()方法就會獲得執行,onSubmit()方法的代碼爲:segmentfault
onSubmit() { this.user = this.prepareSaveUser(); this.userSer.saveUser(this.user).subscribe( () => { this.tokenServ.setToken(value['token']); this.router.navigate(['/birthday']); alert('註冊成功!'); }, (err) => alert(this.userSer.handleError(err)), () => { console.log('The post observable is now completed.'); } );
prepareSaveUser()方法用於將FormGroup類型對象registForm的屬性值賦給一個User對象,並返回這個對象,用於發送用戶數據(利用FormGroup構建響應式表單的內容,請看第七章的內容)。prepareSaveUser()方法的代碼以下:數組
prepareSaveUser(): User { const formModel = this.registForm.value; const saveUser: User = { id: this.user.id, name: formModel.name as string, password: formModel.password as string, email: formModel.email }; return saveUser; }
把prepareSaveUser()方法的返回值賦值給User對象以後,調用UserService類的saveUser()方法,將註冊信息發送到服務器(關於UserService服務類,請看第五章的內容)。若是註冊成功,服務器會返回一個token字符串,存儲了從服務器獲取須要用戶認證的內容時憑證。利用AuthTokenService的setToken()方法將這個憑證存儲到本地。AuthTokenService類的代碼:瀏覽器
import { Injectable } from '@angular/core'; @Injectable() export class AuthTokenService{ setToken(token:string){ sessionStorage.removeItem('token'); if((token as string).length != 0){ sessionStorage.token = token; console.log('sessionStorage.token: ' + sessionStorage.token); } } getToken(){ if(sessionStorage.token){ return sessionStorage.token; }else{ return null; } } }
AuthTokenService類是一個服務類,由於其餘模塊也須要用到,將它放到AppModule的providers數組中:服務器
@NgModule({ declarations: [ ... ], imports: [ ... ], providers: [ ... AuthTokenService ], bootstrap: [AppComponent] }) export class AppModule { }
這個服務提供商的主要工做就是將token的值存儲到sessionStorage中,在須要的時候進行取出。 sessionStorage針對一個 session 進行數據存儲。當用戶關閉瀏覽器窗口後,數據會被刪除。
若是在註冊過程當中發現錯誤,就在對話框中顯示UserService的handleError()方法返回的錯誤提示信息。session
若是註冊成功,就調用Router類的navigate()方法,跳轉到/birthday的url,進入BirthdaysModule模塊。ide
若是須要從新填寫表單內容,按Cancel按鈕後,將觸發revert()方法,代碼以下:post
reset() { this.user = new User(0, '', '', ''); this.registForm.reset({ name: this.user.name, password: this.user.password, email: this.user.email }) }
這裏主要調用了FormGroup類的reset()方法,將全部屬性值設爲this.user對象的屬性值,從而實現表單的重置。this
用戶註冊的內容大體就是這些,主要知識包括angular的HttpClient、ReactForm兩方面的知識。下一章將要講解用戶登陸的內容,在用戶登陸表單中,我將使用模板驅動型表單進行操做。敬請期待......url