网站搜索

angular - splice 无法删除 JavaScript 中的第一个元素


在 Angular2 中,我的 HTML 正在调用 JavaScript 中的 removeThisForm。事件是一个文件数组对象。对于文件数组中的每个对象,我在 Angular2 中生成一个表单。

(click)=removeThisForm(event)

在 JavaScript 中,我正在尝试删除传入的文件。

removeThisForm(file) {
    var removableIndex = arr.indexOf(file);
    if (removeIndex >= 0) {
        arr = arr.splice(removableIndex);
    } 

我能够移除传入的任何表单,除了第一个。我尝试了 shift()、slice() 和 splice(0,1)。当我使用 splice(0,1) 时,我收到了“表单提交已取消,因为表单未连接”的错误。

答案#1

您遗漏了向 Array.prototype.splice 方法传递第二个参数(一个整数,表示要删除的元素数量)。尝试如下:

removeThisForm(file) {
    var removableIndex = arr.indexOf(file);
    if (removeIndex >= 0) {
        arr.splice(removableIndex, 1);
    } 
}

此外,Array.prototype.splice 方法会返回一个包含已删除元素的数组。因此,你不能说:

arr = arr.splice(removableIndex, 1);

因为它会使用 Array.prototype.splice 方法的返回值覆盖你的 arr。