美文网首页程序员
记录angular8中使用 input框输入每一个字符都会失去焦

记录angular8中使用 input框输入每一个字符都会失去焦

作者: 柒枼 | 来源:发表于2020-07-17 14:10 被阅读0次

前端框架 angular8.0

ui组件 NG-ZORRO

场景:表单输入: 前端动态添加input框

数据:eg:['123','222','xxx'] 数组每项为string类型 , ["192.168.1.127/24", "123.2.1.11", "123.2.1.11-192.168.1.127


<div  *ngFor="let item of ipPoolData['_ipAddress'] index as i;trackBy:trackByFn"  style="height: 50px;position: relative;">

    <input name="{{'_ipAddress'+ i}}" nz-input type="text" placeholder="请输入IP/子网IP/子网范围" required

        [(ngModel)]="ipPoolData['_ipAddress'][i]" (ngModelChange)="checkIpRangeVal($event)">

    <span *ngIf="error['iprange']" class="text-error">IP输入不合法</span>

    <div class="btn-handle-item">

        <button nz-button nzType="danger" [nzSize]="'small'"

                (click)="deleteIPCollectionField(i)" *ngIf="ipPoolData['_ipAddress'].length>1">

                <i nz-icon nzType="minus" nzTheme="outline"></i>

        </button>

        <button *ngIf="item && ipPoolData['_ipAddress'].length < 5"

                nz-button nzType="primary" [nzSize]="'small'" [disabled]="ipPoolData['_ipAddress'].length-1 > i " (click)="addIPCollectionField()">

                <i nz-icon nzType="plus" nzTheme="outline"></i>

        </button>

    </div>

</div>

            


坑1:

问题: 当数组每项为string类型时,循环后input内ngmodel直接用item绑定,会出现ngmodle无法赋值问题

解决:数组ngfor循环后每项内容ngmodel绑定需用ipPoolData['_ipAdress'][i],若直接用item则无法绑定数据,ngmodel一般需要item.value类型;

坑2:

问题:input每输入一个字符,鼠标就会失焦问题;

原因: ngmodel用ipPoolData['_ipAdress'][i]绑定后,input每次输入后,angular会重新查询服务器可能会重置包含所有新条目对象的列表,即使先前已显示这些条目也是如此;在这种情况下,Angular只能看到由新的对象引用组成的新列表,它别无选择,只能用所有新的 DOM 元素替换旧的 DOM 元素。 因此会出现input每输入一个字符,鼠标就会失焦问题;

解决方案:

<div *ngFor="let item of ipPoolData['_ipAddress'] index as i;trackBy:trackByFn"></div>

ngFor循环后使用trackBy:trackByFn;向该组件添加一个方法,该方法返回 NgFor 应该跟踪的值。这个例子中,该值是ipPoolData['_ipAdress']的i项,如果 ipPoolData['_ipAdress']的index项已经被渲染,Angular 就会跟踪它,而不会重新向服务器查询相同的ipPoolData['_ipAdress']的index项。

trackByFn(index: any, item: any) {

         returnindex;  

}

相关文章

网友评论

    本文标题:记录angular8中使用 input框输入每一个字符都会失去焦

    本文链接:https://www.haomeiwen.com/subject/oheghktx.html