应产品的需求要做一个可以和word文档一样可以在表格任意行插入一行新的数据这样省了他们排序的事。(注:用的angular7)
下面进入正题 :
原理就是通过ngFor循环数据,然后我们通过下标锁定位置再通过splice方法增加或者删除数组
页面结构很简单(可以做成右击的方式不过demo我就省事一点啦)

<tr *ngFor="let item of list;let i=index">
<td>{{item.name}}</td>
<td (click)="onClick(i)">+</td>
<td (click)="delClick(i)">-</td>
</tr>
public list = [
{
id:1,
name:"苹果"
},{
id:2,
name:"梨"
},{
id:3,
name:"苹果"
},{
id:4,
name:"橘子"
},{
id:5,
name:"西瓜"
},{
id:6,
name:"哈密瓜"
},
];
public getIndex:number;
public getId:number;
onClick = function(index){
this.getId = this.list.length + 1;
this.getIndex = index + 1;
console.log(this.getIndex)
this.list.splice(this.getIndex,0,{id: this.getId,name:'火龙果'})
console.log(this.list);
}
delClick = function (i) {
console.log(i);
this.list.splice(i,1)
console.log(this.list);
}其实这个功能的重点就在于如何准确的锁定你所要的位置的下标。我选择了在点击事件触发的时候把当前的下标直接传过来这样会省去很多事。(如果你用的是vue或者angular.js那么传下标的方式会略有差异)
接下来就是新增和删除事件了,当拿到需要的下标之后通过splice方法来操作这个数组(至于具体splice方法怎么使用百度一大堆我就不写了:懒)。因为双向绑定所以当数据数据变化的时候页面也会变化。