#angular #typescript
#angular #typescript
Вопрос:
У меня есть входные данные, которые можно заполнить, выполнив поиск по элементу или нажав на флажок. При нажатии на флажок ввод должен быть заполнен значением по умолчанию valueText
. Как установить флажок и установить значение [ngModel]
.
public foundedElement: Element[];
public defaultValue: boolean;
public valueText = "text";
constructor(public elementFacade: ElementFacade) {}
addField(value) {
return currentElement.field = value;
}
searchElement(e): void {
const {value} = e.target;
if (value.length > 1) {
this.elementFacade.getAll({name: value}).subscribe(el => this.foundedElement = el);
}
}
<input-container>
<input #elementInput
[mdAutocomplete]="autoElement"
(input)="searchElement($event)"
[ngModel]="currentElement ? currentElement.field : ''"
/>
<md-autocomplete #autoElement="mdAutocomplete">
<md-option
*ngFor="let el of foundedElement"
(onSelectionChange)="addField(el.name)">
{{el.name}}
</md-option>
</md-autocomplete>
</input-container>
<md-checkbox [checked]="defaultValue">Default</md-checkbox>
Комментарии:
1. Что должно произойти, если пользователь снимет флажок? Будет ли ввод также очищен? Кроме того, используете ли вы AngularJS (Angular v1.x)?
2. пользователь выбирает элемент из
md-option
, если пользователь нажимает на флажок, то значениеvalueText
. (Angular 4)3. Я вижу.. Ок, потому что
md-checkbox
это синтаксис из материала AngularJS. Вот почему я был в замешательстве.
Ответ №1:
Что вы можете сделать, так это добавить (change)
событие в флажок, чтобы всякий раз, когда вы нажимаете его, оно меняло значение ввода:
<md-checkbox [checked]="defaultValue" (change)="onCheckChange()">Default</md-checkbox>
И в вашей ts вы добавляете функцию:
onCheckChange() {
this.inputValue = valueText;
}
Где this.inputValue
это ngModel
значение ввода, которое вы хотите изменить. В вашем сценарии, если ввод является #elementInput, то у вас должно получиться что-то вроде:
onCheckChange() {
this.currentElement.field = valueText;
}
При таком подходе это изменится только один раз, из-за объявления ngModel в этом поле.
Чтобы решить эту проблему, вы могли бы сделать две вещи:
- Используйте
[(ngModel)]
со свойством без операций. - Используйте
(ngModelChange)
для обновления значенияthis.currentElement.field
Вы можете проверить живой пример здесь:
https://stackblitz.com/edit/angular-stack-checkbox-55528725?file=src/app/input/input.component.html
Комментарии:
1. идеально! как очистить,
input
когдаdefaultValue
=== false2. Вы имеете в виду проверку только значения по умолчанию o, когда они меняют значение флажка, чтобы увидеть состояние? Если это только для проверки начального значения, то я бы изменил только эту строку:
this.currentElement.field = valueText;
на эту:this.currentElement.field = this.defaultValue? this.valueText : '';