最近工做比較忙,一直沒有更新文章。原來看別人的文章感受很過癮,如今本身寫才發現,要堅持下去真的很難。好了,廢話少說,繼續吧!
這一章主要講利用angularJs控制用戶登陸。在前面的用戶註冊表單中使用了angular的響應式表單。爲了對angular的知識學習的全面一點,在用戶登陸的表單中,使用了模板驅動型表單。css
<div class="div-login"> <form (ngSubmit)="onSubmit()" #loginForm="ngForm"> <div class="form-group"> <label for="name">User name</label> <input type="text" class="form-control" id="name" name="name" placeholder="Enter user name" [(ngModel)]="user.name" required #name="ngModel"> <div *ngIf="name.invalid && (name.dirty || name.touched)" class="alert alert-danger"> User name is required! </div> </div> <div class="form-group"> <label for="password">Password</label> <div class="input-group"> <input class="form-control" id="password" name="passwrod" placeholder="Enter password" [(ngModel)]="user.password" required #password="ngModel"> </div> <div *ngIf="password.invalid && (password.dirty || password.touched)" class="alert alert-danger"> Password is required! </div> </div> <div class="form-group form-btn"> <button type="submit" class="btn btn-primary" [disabled]="!loginForm.form.valid">Submit</button> <button type="button" class="btn btn-light" (click)="loginForm.reset()">Cancel</button> </div> </form> </div>
在這個html文件的<form>標籤中,(ngSubmit)="onSubmit()"
和用戶註冊表單同樣,用於處理表單的提交操做,爲了實如今表單不合法時提交按鈕的disabled爲false,須要讓按鈕可以訪問到表單,從而獲取到表單的狀態,因此,須要在<form>標籤中定義了一個模板引用變量 #loginForm,而且把賦值爲「ngForm」,同時在submit按鈕標籤中加入:[disabled]="!loginForm.form.valid"
。
兩個<input>標籤分別輸入用戶名和密碼,經過ngModel建立雙向綁定到組件類的User對象的name和password屬性,用於讀取和寫入輸入控件的值。這裏須要注意一點:當在表單中使用 [(ngModel)] 時,必需要定義 name 屬性。
模板驅動表單的驗證都在html代碼中實現,須要完成如下幾項任務:html
html部分的內容就這些了,下面咱們看一下控件類的內容。服務器
先把代碼放出來,後面慢慢分析。app
@Component({ selector: 'app-login', templateUrl: './login.component.html', styleUrls: ['./login.component.css'] }) export class LoginComponent { user: User = new User(0, '', '', ''); constructor( private route: Router, private jumService: JumbotronServive, private userServ: UserService, private tokenServ: AuthTokenService) { jumService.setJumbotron(new Jumbotron('Login', `Please login with your user name and password first`, ``)); } onSubmit() { this.userServ.getUser(this.user).subscribe( (resp) => { this.tokenServ.setToken(resp.body['token']); this.route.navigate(['/birthday']); alert('登陸成功!'); }, (err)=> alert(this.userServ.handleError(err)), () => console.log('The Post observable is now completed. ') ) } }
控件類主要完成了以下功能:函數
用戶登陸主要的內容就這些了。其中還有一個小技巧性的東西就是在輸入密碼的時候,由於<input>標籤的type=password,顯示的輸入內容爲「.」,很容易輸錯。我在這個控件上放了一個能夠切換的圖片,用於讓用戶選擇是否查看明文。實現的方法主要是改變<input>控件的attr屬性。若是須要具體實現方法的朋友,能夠給我留言,我會在回覆中告訴你們。學習