Ich erhalte den Fehler 'Erwarteter Prüfer, um Versprechen oder Beobachtbar zurückzugeben', während ich versuche, einen benutzerdefinierten synchronen Prüfer zu implementieren. Ich benutze die FormControl und FormGroup-Klassen für die Bulding der Validatoren.Synchrone Validierung in der endgültigen Freigabe von Angular 2
Dieser Wechsel von der Beta zur endgültigen Version ist verwirrend. Bitte hilf mir.
Vielen Dank im Voraus
Bitte unten meinen Code für die gleiche finden:
userNameValidator.ts
import { FormControl } from '@angular2/common';
export class UserNameValidator
{
static cannotContainSpaces(control:Control)
{
const username = control.value;
console.log(username + "here")
console.log(username.indexOf(' ')>=0 ? {'containsSpace':true} : null);
return username.indexOf(' ')>=0 ? {'containsSpace':true} : null;
}
}
signup.component.ts
import { Component } from '@angular/core';
import { FormControl, FormGroup, Validators, FormBuilder} from '@angular/forms';
import { UserNameValidator } from './userNameValidator';
@Component({
selector: 'my-app',
templateUrl: './signup.component.html'
})
export class SignupComponent
{
form: FormGroup;
constructor(fb: FormBuilder)
{
this.form = fb.group({
username:
[null,Validators.compose([Validators.required,Validators.minLength(4)]),
UserNameValidator.cannotContainSpaces],
password: [null,Validators.compose([Validators.required])]
})
}
signup.component.html
<form [formGroup]="form" >
<div class="form-group">
<label for="username">Username: </label>
<input
class= "form-control"
type="text"
formControlName="username">
<div *ngIf="username.touched &&
form.controls['username'].getError('required')"
class="alert alert-danger">Username cannot be empty
</div>
<div *ngIf="form.controls['username'].getError('minlength')" class =
"alert alert-danger">
Username should have atlest
{{username.errors.minlength.requiredLength}} characters
</div>
<div
*ngIf="form.controls.username.hasError('containsSpaces')"
class="alert alert-danger" > Username Can't Contains Spaces</div>
</div>
Ich habe dies nicht selbst getan, also nicht als Antwort hinzufügen, sondern könnte versuchen, Ihre Funktion 'static cannotContainSpaces (control: Control): Promise 'und geben Sie eine neue Promise, die den Wert, den sie es auf etwas wie' zurück Promise.resolve (benutzername.indexOf ('')> = 0? {'ContainsSpace': true}: null) ' – shaunhusain