#angular #angular-material
#angular #angular-материал
Вопрос:
Я использую некоторый mat-checkbox в своем приложении, и я не знаю, как получить строку из checkbox вместо логического значения.
Читая API на веб-сайте Angular Material checkbox API, я смог найти свойство ‘value’, которое может присваивать строку этому флажку … но как я могу привязать это к моей переменной?
Я пытаюсь что-то вроде этого.
<mat-checkbox color="warn" value="Hello" [(ngModel)]="myString"> Hello </mat-checkbox>
но моя переменная получает логическое значение… как я могу это сделать?
Комментарии:
1. Кажется странным получать строку из checkbox. Если это отключено, какое значение вы получите? Null?
2. нет, переменная — это просто пустая строка, «»
3. наконец,
checked
атрибут может быть только true / false
Ответ №1:
Привязка ngModel флажка всегда будет возвращать его проверенное состояние (true / false / неопределенное). Если вы хотите получить value
свойство из checkbox, вы могли бы добавить событие изменения к элементу следующим образом
<mat-checkbox color="warn" value="Hello" [(ngModel)]="myString" (change)="onChange($event)"> Hello </mat-checkbox>
и в вашем компоненте ts
onChange(event: any)
{
console.log(event.source.value); // will contain "hello"
console.log(event.source.checked); // will contain the checked state of the checkbox
}
Комментарии:
1. итак … невозможно привязать переменную непосредственно к значению? хм…
2. я ожидал, что у этого будет простое решение… потому что в моем случае у меня есть форма с минимум 10 флажками…
Ответ №2:
Все флажки в моем бэкэнде получают ‘Y’ или ‘N’, поэтому мне пришлось сделать это:
Удалить [(ngModel)] и создать функцию для всех флажков
<mat-checkbox name="active" [checked]="model.active === 'Y'" (change)="checkboxChange($event);" > Click me </mat-checkbox>
component.ts
checkboxChange( event ){
let name = event.source.name;
this.model[name] = event.checked ? 'Y' : 'N';
}
Ответ №3:
Вы можете использовать свойство name для хранения строкового значения вместо ngModel.
<mat-checkbox [(ngModel)]="isChecked"
name="{{checkboxStringValue}}">//make sure name is unique for every item
</mat-checkbox>