[Angular2+/JavaScript]点击DIV变成可编辑文本,移开Input消失/原生写法/autofocus失效解决/Directive相关

point:

1、Angular2+的话可以直接在ts里面写,但是考虑到有很多个item,所以改为Directive,但是思路是一样的

2、关于Input自动focus的话是可以H5里写autofocus,但是它none->block之后再次渲染就失效了,我也是醉了,所以只能用定时器的方法在后天把它放到另一个线程了。

效果图:

未点击/或者bulr的时候

点击后:(可编辑的)

思路:其实是DIV和input在同一个位置,控制谁先消失和出现,由于需要双向绑定和监听事件会显得比较麻烦,

点击父DIV--》监听click->绑定focus,并且在父DIV的整个范围里再写一个监听,一旦input失焦,好的那么一切恢复原状

代码:

 <div class="fg-block" appConvertToInput>
      <div class="field-base">{{testValue}}</div>
      <div class="field-input" style="width: 90px;
      display: none;
      height: 15px;">
        <input type="text" (change)="test()" value="testValue" [(ngModel)]="testValue">
      </div>
    </div>
@HostListener('click', ['$event.target'])
  public onClick(targetElement) {
    const fieldInput = this.el.nativeElement.querySelector('.field-input');
    const fieldbase = this.el.nativeElement.querySelector('.field-base');
    const input = this.el.nativeElement.querySelector('input');
    setTimeout(() => {
      input.focus();
    }, 10);
    this.renderer.setStyle(fieldInput, 'display', 'block');
    this.renderer.setStyle(fieldbase, 'display', 'none');
    input.addEventListener('blur', (event) => {
      this.renderer.setStyle(fieldInput, 'display', 'none');
      this.renderer.setStyle(fieldbase, 'display', 'block');
    });

其实这里已经有点违反Angular少操作DOM的原则了,监听事件也偏向原生JS,思路其实蛮简单,如果是纯JS也可以实现

click是绑定在父DIV上的,父DIV里也可以取到当前元素的子元素,原生JS和Angular取DOM的方式不同,不多说了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值