代码之家  ›  专栏  ›  技术社区  ›  kittu

在角度6中修改阵列数据后视图未更新

  •  0
  • kittu  · 技术社区  · 6 年前

    我正在从数组中删除数据并尝试更新视图,但它不起作用。

      async deleteProduct(e) {
        try {
          const data = await this.rest.get(environment.apiUrl + `/api/seller/products/delete/?id=${e.target.id}`);
          data['success'] ? this.products = (this.products.filter(e => e != (data['products'].id))) : this.data.error(data['message']);
        } catch (error) {
          this.data.error(error['message']);
        }
      }
    

    <section id="myProducts">
      <div class="container p-5">
        <app-message></app-message>
        <div *ngIf="!products" class="m-auto">
          <h1 class="text-center display-3 mt-5">
            <i class="fa fa-spinner fa-spin"></i>
          </h1>
        </div>
        <h3 *ngIf="products && !products.length" class="display-2 text-center mt-5">My Products is Empty</h3>
        <div *ngIf="products && products.length" class="row">
          <div class="col">
            <h4 class="display-4">My Products</h4>
            <div class="row">
              <div class="offset-10 col-2 d-none d-md-block">
                <p>
                  <small class="text-muted">Price</small>
                </p>
              </div>
            </div>
            <hr class="mt-0">
            <div *ngFor="let product of products" class="product">
              <div class="row">
                <div class="col-4 col-md-2">
                  <a routerLink="/product/{{ product.id }}">
                    <img src="{{ product.image }}" alt="image" class="img-fluid img-thumbnail">
                  </a>
                </div>
                <div class="col-5 col-md-8">
                  <h5>
                    <a routerLink="/product/{{ product.id }}">{{ product.title }}</a>
                    <p class="m-0">
                      <small class="text-muted">{{ product.category.name }}</small>
                    </p>
                  </h5>
                </div>
                <div class="col-2">
                  <h6 class="font-weight-bold text-danger" >{{ product.price | currency : 'INR' }}</h6>
                </div>
                <div class="col-2">
                  <button type="button" class="btn btn-info" id="{{product.id}}" (click)="editProduct($event)" [disabled]="btnDisabled">Edit</button>
                </div>
                <div class="col-2">
                  <button type="button" class="btn btn-info" id="{{product.id}}" (click)="deleteProduct($event)" [disabled]="btnDisabled">Delete</button>
                </div>
              </div>
              <hr>
            </div>
          </div>
        </div>
      </div>
    </section>
    

    从数组中删除项后,我正尝试更新对象,如下所示:

    this.products = (this.products.filter(e => e != (data['products'].id)))
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Batajus    6 年前

    看起来你的视图没有检查 products 阵列。

    所以我要说手动触发它:

    注入 ChangeDetectorRef 手动触发变更检测。

    constructor(private cd: ChangeDetectorRef){....}
    

    在你的方法调用中 this.cd.detectChanges() :

    async deleteProduct(e) {
        ...
        data['success'] ? this.products = (this.products.filter(e => e != (data['products'].id))) : this.data.error(data['message']);
        this.cd.detectChanges();
        ...
    }
    
        2
  •  0
  •   Anan Kassis    6 年前

    你在跟我比!=e['products'].id。。 这不是真的。 我想你应该检查一下你的“e”中包含id的变量

    也就是说

    e、 身份证!=……或者类似的东西。

    我希望它能起作用。