У меня есть всплывающее окно для создания нового проекта. Я сохраняю запись нового проекта в кусте, который не поддерживает пробелы в имени таблицы. Так может кто-нибудь помочь мне поставить проверку в mat-input, чтобы удалить пробелы из поля inout.
HTML код
<form (ngSubmit) = "(submit)" #formControl = "ngForm">
<div class = "form">
<mat-form-field color = "accent">
<input
matInput
#input
class = "form-control"
placeholder = "name"
[(ngModel)] = "data.projectName"
name = "name"
[formControl] = "nameControl"
required
minlength = "4"
(ngModelChange) = "noWhiteSpaceOnChange()"
/>
<mat-error
*ngIf = "nameControl.hasError('required')"
>Please Enter Name</mat-error
>
<mat-error
*ngIf = "nameControl.hasError('minlength')"
>You must enter atleast 4
characters</mat-error
>
</mat-form-field>
</div>
<!--Textarea for demo purposes-->
<div class = "form">
<mat-form-field color = "accent">
<textarea
matInput
#input
class = "form-control"
placeholder = "Description"
[(ngModel)] = "data.projectDescription"
name = "projectDescription"
required
></textarea>
<mat-error *ngIf = "formControl.invalid">{{
getErrorMessage()
}}</mat-error>
</mat-form-field>
</div>
<div mat-dialog-actions>
<button
mat-button
[type] = "submit"
[disabled] = "!formControl.valid"
[mat-dialog-close] = "data"
(click) = "confirmAdd()"
>
Save
</button>
<button
mat-button
(click) = "onNoClick()"
tabindex = "-1"
>
Cancel
</button>
</div>
</form>
Машинописный код:
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { Component, Inject } from '@angular/core';
import { RecommendationService } from '../../../recommendation-
service.service';
import { FormControl, Validators } from '@angular/forms';
import { Project } from '../../model/project';
@Component({
selector: 'app-add.dialog',
templateUrl: './add.dialog.html',
styleUrls: ['./add.dialog.scss']
})
export class AddDialogComponent {
formControl = new FormControl('', [
Validators.required
// Validators.email,
]);
constructor(public dialogRef: MatDialogRef<AddDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: Project,
public dataService: RecommendationService) { }
getErrorMessage() {
return this.formControl.hasError('required') ? 'Required field' :
this.formControl.hasError('email') ? 'Not a valid email' :
'';
}
submit() {
// emppty stuff
}
onNoClick() {
this.dialogRef.close();
}
public confirmAdd() {
this.addProject(this.data);
}
// DEMO ONLY, you can find working methods below
addProject(project: Project) {
return project;
}
}
class SaveData {
id: number;
title: String;
CreatedOn: String;
}
Обновлено: в соответствии с предложениями я использовал реактивную форму, но я все еще не могу понять





вы можете создать собственный валидатор, а затем добавить валидатор в «контроль формы»
whitespacecontrol(control: FormControl): { [s: string]: boolean } {
if (control.value != null) {
if (control.value.indexOf(' ') != -1) {
return { 'whitespace': true };
}
}
return null;
}
formControl = new FormControl('', [
Validators.required,
this.whitespacecontrol.bind(this)
]);
и вы можете проверить с помощью formControl.invalid
Как сказал трише, вы должны очистить свой код и правильно использовать formControls. Вот как это сделать: https://angular.io/guide/reactive-forms
Когда вы используете formControls, вы можете предоставить валидатор шаблона:
new FormControl('', Validators.pattern(/^\S*$/))
Валидатор проверяет ваш ввод на соответствие регулярному выражению, запрещающему пробелы.
Если вы не хотите использовать валидаторы, вы также можете просто использовать someString.replace(/\s/g, "") для удаления всех пробелов перед отправкой формы.
Вы создаете элемент управления формы, не используете его, а используете переменную, управляемую шаблоном, а затем используете элемент управления формы для проверки ... Очистите свой код, вы должны решить свою проблему самостоятельно только с этим.