删除

时间:2016-09-16 15:30:18

标签: angular typescript angular2-routing angular2-template

我有一个angular2应用程序,其后端在java中。我有一份客户名单。当我单击以删除客户时,客户将被删除,但列表不会更新。如果我手动刷新页面,则列表会更新。我尝试在delete方法的订阅中路由到列表组件,但这不起作用。

列表customers.component.html

<tr [class.warning]="customer.isDefault == 1" *ngFor="let customer of customers | orderBy:['firstName'] | search:searchCustomer.value;let serial = index">
                <td>{{ serial+1 }}</td>
                <td>{{ customer?.firstName+' '+customer?.lastName}}</td>
                <td>{{ customer.email}}</td>
                <td>{{ customer.mobileNumber}}</td>
                <td>{{ customer.streetAddress}}</td>
                <td>{{ customer.priceList?.name}}</td>
                <td><a [routerLink]="['/loggedIn','customer','edit', customer.id ]"><i class="fa fa-edit fa-2x"></i></a></td>
                <td><a (click)="delete(customer)"><i class="fa fa-trash-o fa-2x"></i></a></td>
              </tr>

列表customers.component.ts

    ngOnInit()
    {
        this.refreshCustomersList();
    }

    delete(customer)
    {
        this.userService.delete(customer.id)
            .subscribe(
                success=>
                {
                    var index = this.customers.indexOf(customer, 0);
                    if (index > -1)
                    {
                        this.customers.splice(index, 1);
                    }
                }
            )

    }

    refreshCustomersList()
    {
        this._authHttp.get(
                this.appService.getApiUrl() + "api/customer/list"
            )
            .map(res=>res.json())
            .subscribe(
                successResponse=>
                {
                    this.customers = successResponse.data.customers;
                },
                () => console.log("Request Completed")
            )

    }
}

6 个答案:

答案 0 :(得分:6)

尝试在this.refreshCustomersList();函数中调用delete,如下所示:

    delete(customer)
{
    this.userService.delete(customer.id)
        .subscribe(
            success=>
            {
                var index = this.customers.indexOf(customer, 0);
                if (index > -1)
                {
                    this.customers.splice(index, 1);
                    this.refreshCustomersList();
                }
            }
        )

}

这将在删除客户后更新customers数组。

答案 1 :(得分:1)

Splice将返回已删除的元素,而不是使用slice在删除后返回结果数组,如: -

this.customers = this.customers.slice(index);

答案 2 :(得分:0)

我们可以按照以下方式设置客户列表,而不是再次从API获取整个列表。它对我有用:

delete(customer)
{
    this.userService.delete(customer.id)
        .subscribe(
            success=>
            {
                var index = this.customers.indexOf(customer, 0);
                if (index > -1)
                {
                    this.customers = this.customers.splice(index, 1);
                }
            }
        )

}

答案 3 :(得分:0)

在HTML中输入以下代码:

(click)="delete(customer.length-1-i)".
//
deleteFieldValue(index) {
this.customer.splice(index, 1);
this.revervefordispaly();
}

//for reverse:

revervefordispaly(){
this.reversedProductdata.reverse();
}

答案 4 :(得分:0)

您可以像这样使用JavaScript数组过滤器。

    this.userService.delete(customer.id)
    .subscribe(
        success=>
        {

             let newCustomers = this.customers.filter(item => item.id !== customer.id);
             this.customers = newCustomers;
        }
    )

答案 5 :(得分:0)

我有几乎相同的案例,我有一系列产品。 我必须让用户根据他们的选择删除产品。 最后,如果数组中没有产品,那么我需要在不重新加载页面的情况下显示取消按钮而不是后退按钮。

我通过在 ngAfterViewChecked() 生命周期钩子中检查空数组来完成它。

products: Product[];
someCondition: boolean;

constructor(private cdr: ChangeDetectorRef) {}
// import { ChangeDetectorRef } from '@angular/core';

ngAfterViewChecked() {
    this.emptyArray();
}

emptyArray() {
    this.someCondition = this.products.length === 0 ? true : false;

    // run change detection explicitly
    this.cdr.detectChanges();
}

removeProduct(id) {
    // your logic for removing product.
}