【问题标题】:Delete Tr in Iterated *ngFor Using Template Driven in Angular 2/4使用 Angular 2/4 中的模板驱动在 Iterated *ngFor 中删除 Tr
【发布时间】:2017-11-27 03:34:58
【问题描述】:

如何使用模板驱动表单删除此行?我很困惑,因为数组是在*ngFor 中迭代的?我怎样才能做到这一点?这是我在下面所做的。

HTML

<tr *ngFor="let innerItem of project.material_projects | orderBy: {property: column, direction: direction} |  let i = index">
    <td>{{innerItem.material.name}}</td>
    <td>{{innerItem.balance}}</td>
    <td>
    <button type="button" class="btn btn-sm btn-danger" (click)="onDelete(i)"> Delete</button>
    </td>
</tr>

TS

onDelete(index: number) {
      this.projects.material_projects.splice(index, 1)
}

【问题讨论】:

    标签: angular tr angular-template angular-forms


    【解决方案1】:

    问题在于你的逻辑部分:

    | orderBy: {property: column, direction: direction} |
    

    这是重新排序您的project.material_projects 数组,并且您正在使用重新排序的数组的索引,因此您需要在此行之前执行相同的操作:

    this.projects.material_projects.splice(index, 1)
    

    它已经完成了。


    如果 id 是独一无二的,你可以通过 onDelete(innerItem.id)

    然后

    onDelete(id: number) {
        let index = // logic to find index of that id ;
        this.projects.material_projects.splice(index, 1);
    }
    

    【讨论】:

    • 你能编辑 HTML 部分吗?我对你说的话感到困惑。谢谢
    • @Joseph,请为此创建一个 plnkr,我会带你去那里。你可以按照第二种方式就很清楚了。
    • @Joseph,请您为此创建 plnkr 吗?
    • 因为this.projects里面有几个项目所以不能
    • @Joseph,请仔细阅读答案,非常简单明了。
    【解决方案2】:

    试试这样:

    <tr *ngFor="let i = index; let innerItem of project.material_projects | orderBy: { property: column, direction: direction }">
        <td>{{innerItem.material.name}}</td>
        <td>{{innerItem.balance}}</td>
        <td>
            <button type="button" class="btn btn-sm btn-danger" (click)="onDelete(i)"> Delete</button>
        </td>
    </tr>
    

    和 ts onDelete 方法如下:

    onDelete(index) {
        this.project.material_projects.splice(index, 1);
    }
    

    【讨论】:

    • 问题是这个tr在*ngFor=let project of projects下。所以这就是错误拼接未定义出现的原因
    • @Joseph 试试这样的 tr 标签:-
    • 不要碰 orderBy,因为我有 fa-ort 管道,无论是 desc 还是 ascn,这取决于按下的箭头
    • 声明的数组名是project.material_projectsprojects.material_projects先检查这个。您将显示模板 project.material_projects 和 typescript onDelete 方法声明 this.projects.material_projects.splice(...)
    • 如果 project.material_projects 是一个数组,则 splice 方法将起作用,否则检查 onDelete 方法和 tr 标签。只需在 onDelete 方法中打印 index 控制台并使用 tr 标签,如下所示:&lt;tr *ngFor="let i = index; let innerItem of project.material_projects | orderByNew: { property: column, direction: direction }"&gt;&lt;/tr&gt; 它对我有用
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签