Angular 2 Проверьте, существует ли электронная почта
Я изо всех сил пытаюсь сделать метод, который проверяет, существует ли адрес электронной почты в моей БД. Если это произойдет, я должен получить 1 в качестве ответа и 0, если это не так. Вот моя форма HTML:
<form novalidate (ngSubmit)="addUser(utilisateur)" [formGroup]="formUtilisateur">
<div class="form-group">
<label for="email">Email*:</label>
<input type="email" id="email" class="form-control" placeholder="Adresse Email" formControlName="email">
</div>
<div class="error text-center alert alert-danger" *ngIf="formUtilisateur.get('email').hasError('incorrectEmailFormat') && formUtilisateur.get('email').touched">
Format Email incorrect.
</div>
<div class="error text-center alert alert-danger" *ngIf="formUtilisateur.get('email').hasError('emailExistant') && formUtilisateur.get('email').touched">
Already taken
</div>
<br>
<button type="submit" class="btn btn-info bnt-lg col-md-12" [disabled]="formUtilisateur.invalid">Sign up</button>
</form>
Теперь мой signup.service.ts:
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { Utilisateur } from "../../models/utilisateur";
@Injectable()
export class SignupService {
urlCheckEmail: string = 'http://localhost:8080/signup/checkEmail';
constructor(private http: Http) { }
checkEmail(email:string) {
return this.http.post(this.urlCheckEmail, email)
.map((res: Response) =>{return res.json().status});
}
}
Теперь мой компонент, который использует сервис signup.component.ts:
import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router";
import { Utilisateur } from "../../models/utilisateur";
import { SignupService } from "../../services/signup/signup.service";
import { FormBuilder, FormGroup, FormControl, Validators } from "@angular/forms";
@Component({
selector: 'signup',
templateUrl: './signup.component.html',
styleUrls: ['./signup.component.css']
})
export class SignupComponent implements OnInit {
formUtilisateur: FormGroup;
utilisateur: Utilisateur;
ngOnInit() {
this.formUtilisateur = this.fb.group({
email: ['', Validators.compose([Validators.required, this.emailExisteValidation])]
});
}
constructor(private signupService: SignupService, private fb: FormBuilder) { }
emailExisteValidation() {
this.signupService.checkEmail(this.formUtilisateur.controls['email'].value).subscribe(data => {
if(data != 0)
return { "emailExistant": true };
})
return null;
}
}
Находясь в консоли браузера, я вижу это как ошибку:
Ошибка типа: не удается прочитать свойство 'signupService' неопределенного в webpackJsonp.../../../../../src/app/components/signup/signup.component.ts.SignupComponent.emailExisteValidation (signup.component. тс:54) ...
Строка 54 это: this.signupService.checkEmail(this.formUtilisateur.controls['email'].value).subscribe(data => {
Я не знаю, если это лучший способ проверить, существует ли адрес электронной почты, но это то, что я пробовал до сих пор, и это не работает.
Например, для test@test.com я должен получить 1 в качестве ответа, так как он уже хранится в моей БД. Почтальон проверки
Буду очень признателен за вашу помощь, спасибо.
1 ответ
Пожалуйста, добавьте RegistrationService в провайдеры в вашем модуле / компоненте.
providers: [SignupService]
Также,
let control = this.formUtilisateur.get('email');
if (control.valid && control.dirty) {
this.signupService.checkEmail(this.formUtilisateur.controls['email'].value).subscribe(data => {
if(data != 0)
return { "emailExistant": true };
})
}
}
return null;