Я хочу сделать следующее:
<button mat-icon-button color="primary"
matTooltip="Merge batches"
[swal]="{
title: 'Are you sure?',
input: 'text', inputPlaceholder: 'Please type the description in',
type: 'warning',
showCancelButton: true,
confirmButtonText: 'Yes',
cancelButtonText: 'Cancel',
confirmButtonClass: 'btn btn-primary',
cancelButtonClass: 'btn btn-outline-primary',
inputValidator: (value) => {
return new Promise((resolve) => {
if (value.length >= 3) {
resolve();
} else {
resolve('The description should be at least 3 characters!')
}
});
}
}">
<mat-icon>call_merge</mat-icon>
</button>
Как видите, у меня есть одна кнопка и подсластитель2.Когда вы нажимаете кнопку, появляется окно с текстовым полем.Это текстовое поле должно содержать не менее 3 символов, в противном случае пользователь увидит сообщение об ошибке от sweetalert.
Проблема в следующем: угловой компилятор недоволен inputValidator.Компилятор всегда говорит, что где-то в лямбда-выражении inputValidator отсутствует скобка.Однако, если я удаляю этот материал inputValidator, то код работает чудесно.
Я также пытался определить компоненты swal отдельно, например,
<swal
#MergeSwal
title="Are you sure?"
type="warning"
input="text"
inputPlaceholder="Please type the description in"
[showCancelButton]="true"
confirmButtonText="Yes"
cancelButtonText="Cancel"
confirmButtonClass="btn btn-primary"
cancelButtonClass="btn btn-outline-primary"
(inputValidator)="validate($event)">
</swal>
с функцией validate
validate(event) {
console.log('It works');
return new Promise((resolve) => {
if (event.length >= 3) {
resolve();
} else {
resolve('The description should be at least 3 characters!')
}
});
}
и с кодом для кнопки
<button mat-icon-button color="primary"
matTooltip="Merge batches" [swal]="MergeSwal">
<mat-icon>call_merge</mat-icon>
</button>
В этом случае окно подсвечивания отображается правильно, но средство проверки не работает.Функция validate () по какой-то причине не выполняется.
Я также попробовал следующее: я определил функцию
merge() {
swal({
title: 'Are you sure?',
input: 'text',
inputPlaceholder: 'Please type the description in',
type: 'warning',
showCancelButton: true,
confirmButtonText: 'Yes',
cancelButtonText: 'Cancel',
confirmButtonClass: 'btn btn-primary',
cancelButtonClass: 'btn btn-outline-primary',
inputValidator: (value) => {
return new Promise((resolve) => {
if (value.length >= 3) {
resolve();
} else {
resolve('The description should be at least 3 characters!')
}
});
}
});
}
И затем я вызываю эту функцию при нажатии кнопки.
<button mat-icon-button color="primary"
matTooltip="Merge batches" (click)="merge()">
<mat-icon>call_merge</mat-icon>
</button>
В этом случае все работает хорошо, кроме классов .css!Отображается необходимое сообщение об ошибке, но компилятор Angular явно не видит классов .css, определенных в файле .ts.В результате в окне со сладостями отображаются стандартные классы .css.
Может кто-нибудь мне помочь?Какой самый простой способ заставить inputValidator работать правильно?