2017-03-28 157 views
1

我是Angular 2的新手,想檢查用戶是否輸入了正確的用戶名和密碼。Angular2:JSON渲染

我附加了JSON格式。另外我需要將一個組件的值傳遞給另一個組件。有什麼功能可以緩存local storage以外的值。

import { Component } from '@angular/core'; 
 
import { Router } from '@angular/router'; 
 
import { LoginService } from '../login.service'; 
 

 
@Component({ 
 
    selector: 'app-login', 
 
    templateUrl: './login.component.html', 
 
    styleUrls: ['./login.component.css'], 
 
    providers: [LoginService] 
 
}) 
 
export class LoginComponent { 
 
usernameModel: string; 
 
passwordModel: string; 
 
validLogin: Boolean; 
 
loginData: any; 
 
loginDataLength: number; 
 
    constructor(private router: Router, private loginService: LoginService) { } 
 

 
    homeNav(){ 
 

 
    this.loginService.getLoginData() 
 
     .subscribe(data => { 
 
     this.loginData = data; 
 
     this.loginDataLength = data.length; 
 
     }); 
 

 
     for(var i = 0; i < this.loginDataLength; i++) 
 
     { 
 
     if(this.loginData[i].username === this.usernameModel){ 
 
      console.log(this.loginData[i].username+', '+this.loginData[i].password); 
 
     } 
 
     else{ 
 
      console.log('Login issue'); 
 
     } 
 
     }; 
 

 
    } 
 
} 
 

 
/* JSON 
 

 
[{ 
 
\t "username": "jay", 
 
\t "password": "jay", 
 
\t "userType": "standard" 
 
}, { 
 
\t "username": "Admin", 
 
\t "password": "Admin", 
 
\t "userType": "admin" 
 
}, { 
 
\t "username": "newuser", 
 
\t "password": "newuser", 
 
\t "userType": "standard" 
 
}, { 
 
\t "username": "anonmyous", 
 
\t "password": "anonmyous", 
 
\t "userType": "standard" 
 
}] 
 

 
*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
 
<div id="loginBox"> 
 
    <div class="alert alert-danger" *ngIf="validLogin === false"> 
 
     <strong>Alert!</strong> Wrong Username/Password. 
 
    </div> 
 
    <form class="form-group" #loginForm="ngForm"> 
 
     <div class="input-group"> 
 
      <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
 
      <input type="text" class="form-control" placeholder="Username" [(ngModel)]="usernameModel" name="username" #username="ngModel" required /> 
 
      <span class="input-group-addon errorBox" *ngIf="username.errors && (username.dirty || username.touched)"> 
 
       <i class="glyphicon glyphicon-exclamation-sign" [hidden]="!username.errors.required"></i> 
 
      </span> 
 
     </div> 
 
     <div class="input-group"> 
 
      <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> 
 
      <input type="password" class="form-control" placeholder="Password" [(ngModel)]="passwordModel" name="password" #password="ngModel" required /> 
 
      <span class="input-group-addon errorBox" *ngIf="password.errors && (password.dirty || password.touched)"> 
 
       <i class="glyphicon glyphicon-exclamation-sign" [hidden]="!password.errors.required"></i> 
 
      </span> 
 
     </div> 
 
     <button class="btn btn-primary btn-block" [disabled]="!loginForm.valid" (click)="homeNav()" >Login</button> 
 
    </form> 
 
</div>

+1

而問題是什麼? – n00dl3

+0

您是否試圖檢查客戶端上的正確用戶名/密碼?如果是這樣,你應該發送用戶名/密碼到服務器進行驗證。 –

+0

https://angular.io/docs/ts/latest/cookbook/component-communication.html我想你會想要一個服務:) – Alex

回答

0

首先你要等到getLoginData做出決議,其次不要把密碼給客戶端:

//... 

    constructor(private router: Router, private loginService: LoginService) { } 

    ngOnInit(){ 

    this.loginService.getLoginData() 
     .subscribe(data => { 
     this.loginData = data; 
     this.loginDataLength = data.length; 
     }); 
    } 
    homeNav(){ 
     for(var i = 0; i < this.loginDataLength; i++) 
     { 
     if(this.loginData[i].username === this.usernameModel){ 
      console.log(this.loginData[i].username+', '+this.loginData[i].password); 
     } 
     else{ 
      console.log('Login issue'); 
     } 
     }; 

    } 
} 
+0

我該如何檢查getLoginData是否解決? – Jay

+0

檢查'this.loginData!== undefined' –

+0

我得到這個錯誤「./~/rxjs/Observable.js 有多個模塊的名稱只在套管中有區別 這會導致在編譯時出現意外的行爲在一個文件系統上使用其他的case-semantic。 使用相等的大小寫比較這些模塊標識符: * C:\ angularjs2 \ testApp \ node_modules \ rxjs \ Observable.js 由20個模塊使用,即C:\ angularjs2 \ testApp \ node_modules \ @angular \ core \ src \ facade \ async.j C:\ angularjs2 \ testApp \ node_modules \ @ngtools \ webpack \ src \ index.js!C:\ angularjs2 \ testApp \ src \ app \ detail.service .ts「 – Jay