Очистка входного текстового поля в Angular2
Почему этот метод не работает, когда я пытаюсь очистить текстовое поле?
<div>
<input type="text" placeholder="Search..." [value]="searchValue">
<button (click)="clearSearch()">Clear</button>
</div>
export class App {
searchValue:string = '';
clearSearch() {
this.searchValue = '';
}
}
Чего я ожидаю: так как я передаю свойство для поискового значения, когда я нажимаю кнопку, оно должно получить обновленное значение, которое обрабатывается в функции clearSearch()
.
Я также заметил, что если я устанавливаю значение по умолчанию для searchValue
, clearSearch()
работает, но только один раз.
Пожалуйста, проверьте мой поршень.
Ответы
Ответ 1
1. Первый метод
вам нужно назначить пустую или пустую строку здесь
this.searchValue = null;
//or
this.searchValue = ' ';
Рабочий Plunker
потому что из angular не обнаружено никакого события. поэтому вам нужно присвоить какое-либо значение либо null, либо string с пробелом
2. Второй метод
- использование
[(ngModel)]
должно работать с ngModel
.
почему?
потому что, как вы связались с атрибутом value
, который является только привязкой к свойствам, а не привязкой события. так
angular не запускает обнаружение изменений, поскольку ни одно событие, относящееся к angular, не запускается. Если вы привязываетесь к событию, тогда angular запускает обнаружение изменений, а работы привязки и значение должны быть изменены.
см. рабочий пример с ngModel
Рабочий пример с ngModel
Ответ 2
Вы можете просто изменить ссылку на входное значение, как показано ниже
<div>
<input type="text" placeholder="Search..." #reference>
<button (click)="reference.value=''">Clear</button>
</div>
Ответ 3
Способ 1.
Использование `ngModel`.
@Component({
selector: 'my-app',
template: `
<div>
<input type="text" placeholder="Search..." [(ngModel)]="searchValue">
<button (click)="clearSearch()">Clear</button>
</div>
`,
})
export class App {
searchValue:string = '';
clearSearch() {
this.searchValue = null;
}
}
Код плунжера: Plunker1
Способ 2.
Использование пустого значения вместо пустых кавычек.
@Component({
selector: 'my-app',
template: `
<div>
<input type="text" placeholder="Search..." [value]="searchValue">
<button (click)="clearSearch()">Clear</button>
</div>
`,
})
export class App {
searchValue:string = '';
clearSearch() {
this.searchValue = null;
}
}
Код плунжера: Plunker2
Ответ 4
Есть два дополнительных способа сделать это кроме двух методов, упомянутых в ответе @PradeepJain.
Я бы предложил не использовать этот подход и использовать его только в качестве крайней меры, если вы не используете директиву [(ngModel)]
а также не используете привязку данных через [value]
. Прочитайте это для получения дополнительной информации.
Использование ElementRef
app.component.html
<div>
<input type="text" #searchInput placeholder="Search...">
<button (click)="clearSearchInput()">Clear</button>
</div>
app.component.ts
export class App {
@ViewChild('searchInput') searchInput: ElementRef;
clearSearchInput(){
this.searchInput.nativeElement.value = '';
}
}
Использование FormGroup
app.component.html
<form [formGroup]="form">
<div *ngIf="first.invalid"> Name is too short. </div>
<input formControlName="first" placeholder="First name">
<input formControlName="last" placeholder="Last name">
<button type="submit">Submit</button>
</form>
<button (click)="setValue()">Set preset value</button>
<button (click)="clearInputMethod1()">Clear Input Method 1</button>
<button (click)="clearInputMethod2()">Clear Input Method 2</button>
app.component.ts
export class AppComponent {
form = new FormGroup({
first: new FormControl('Nancy', Validators.minLength(2)),
last: new FormControl('Drew'),
});
get first(): any { return this.form.get('first'); }
get last(): any { return this.form.get('last'); }
clearInputMethod1() { this.first.reset(); this.last.reset(); }
clearInputMethod2() { this.form.setValue({first: '', last: ''}); }
setValue() { this.form.setValue({first: 'Nancy', last: 'Drew'}); }
}
Попробуйте это на стекблице Очистка ввода в FormGroup
Ответ 5
HTML
<input type="text" [(ngModel)]="obj.mobile" name="mobile" id="mobile" class="form-control" placeholder="Mobile/E-mail" />
TS
onClickClear(){
this.obj.mobile= undefined;
}
Ответ 6
вы должны использовать this.searchValue = null