javascript - 清除 Angular 2 中的文本框不起作用

标签 javascript angular

尝试实现一个可重用的搜索框。

代码很基础,我对 Angular 2 还比较陌生,但现在已经使用 Angular 1 一段时间了。

为什么文本框焦点上的值没有清除?

import { Component, OnInit, Input } from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'searchbox',
  template: `
    <form id="search" action="/search" method="get" [class.focus]="focus" class="searchbar" autocomplete="off" role="search">
        <i class="fa fa-search search-icon"></i>
        <input (focus)="onFocus()" (focusout)="onFocusOut()" name="q" 
          type="text" [value]="value" [placeholder]="placeholder" tabindex="1" autocomplete="off" maxlength="240">
        <button type="submit" class="btn js-search-submit">
          <i class="fa fa-search"></i>
        </button>
    </form>

  `,
  styleUrls: [
    './searchbox.component.less'
  ]
})

export class SearchBoxComponent implements OnInit {

  @Input() placeholder: string;
  @Input() value: string;
  focus: boolean;

  ngOnInit() { }

  onFocus() {
    this.value = '';
    console.log(this.value);
    this.focus = true;
  }

  onFocusOut() {
    console.log('focus out');
    this.focus = false;
  }
}

最佳答案

您需要使用 [(ngModel)] 而不是 @Input() 进行双向数据绑定(bind)。

<input (focus)="onFocus()" (focusout)="onFocusOut()" name="q" 
      type="text" [(ngModel)]="value" [placeholder]="placeholder" tabindex="1" autocomplete="off" maxlength="240">

export class SearchBoxComponent implements OnInit {
  @Input() placeholder: string;
  value: string;
  focus: boolean;

  ngOnInit() { }

  onFocus() {
   this.value = null;
   console.log(this.value);
   this.focus = true;
  }

 onFocusOut() {
  console.log('focus out');
  this.focus = false;
  }
}

希望对你有帮助!!

关于javascript - 清除 Angular 2 中的文本框不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43817141/

相关文章:

javascript - 如何在类似于 "arguments"的 jquery 函数中使用 'this' 对象?

angular - modal.dismiss() 上的 Ionic 4 leaveAnimation

javascript - 获取子组件中 ngModel 的值

angular - 合并连续 Observables 结果的最佳方法是什么?

javascript - 我如何编码才能使用户在输入上一个问题的答案后只能转到下一个问题? HTML/JS

javascript - 如何从对象中获取值?

javascript - 使用 Web Audio API 将多个 ArrayBuffer 合并/分层为一个 AudioBuffer

Angular 2通过输入更改类中的变量

forms - 如何使 ionic 范围成为表单内的必填字段

javascript - 将输入值输出到范围