#angular #timepicker
Вопрос:
Есть ли какой-либо способ отключить поле ввода candidosales/material-time-picker в приложении Angular. При вводе времени с клавиатуры все ломается.
Комментарии:
1. Когда вы говорите «Брелок», вы имеете в виду обычный или мобильный? И ломается все, что не вычисляет время ввода или показывает какую-то ошибку? Это демо-версия stackblitz на github: stackblitz.com/edit/material-time-picker и если я попытаюсь использовать клавиатуру для ввода времени, это не сработает так, как вы указали
2. Не мобильная клавиатура.
3. Пожалуйста, проверьте эту ссылку github.com/candidosales/material-time-picker/issues/1 это похожая проблема, с которой я сталкиваюсь.
4. Мой ответ ниже может вам помочь, вы пробовали?
5. На экране есть несколько индикаторов времени, а также он не работает на ngAfterViewInit()
Ответ №1:
Если вы хотите запретить ввод с клавиатуры, вам необходимо использовать onKeyDown
атрибут поля ввода. Там вам просто нужно написать return false
. Поэтому каждый раз, когда пользователь пытается что-то ввести, оно отменяется. Затем пользователь может выбрать дату только с помощью средства выбора даты материала. Ниже у меня есть пример для такого поля формы, как я их использую.
<mat-form-field appearance="outline" color="primary">
<mat-label>Date</mat-label>
<input
matInput
[min]="minDate"
[matDatepicker]="picker"
autocomplete="off"
onKeyDown="return false"
placeholder="Date"
formControlName="date"
/>
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-error *ngIf="date.invalid"
>Please select a date</mat-error
>
</mat-form-field>
Ответ №2:
Я просмотрел документацию, и в настоящее время нет «способа» получить доступ к свойствам ввода, отключенным или готовым(наиболее подходящим) для вашего случая.
Но вы можете «взломать» с помощью чистого javascript. Возможно, есть и лучшие способы обойти это, но вы должны обратить внимание, если ваш выбор времени-единственный на странице, см. Ниже:
1 — ПЕРВЫЙ СЛУЧАЙ: Несколько индикаторов времени на экране: в вашем методе ngAfterViewInit () (заставьте его ждать загрузки html и элементов управления)
/*This will take every timepicker inputs on page. They all share this #time_Control id
index init with 0, if the timepicker you want is the first. Adjust the index accordingly
*/
ngAfterViewInit(){
const timepickers: any[] = document.querySelectorAll('#time_Control');
const index = 0;
const mytimepicker = timepickers[ index ];
mytimepicker.disabled = true;
//or, my personal recomendation => mytimepicker.readonly = true;
}
2 — СЕКУНДНЫЙ СЛУЧАЙ: Один таймер на экране:
в вашем методе ngAfterViewInit () (заставьте его ждать загрузки html и элементов управления)
ngAfterViewInit(){
const mytimepicker: any = document.querySelector('#time_Control');
mytimepicker.readonly = true;
}