在角度6中修改数组数据后,视图未更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在角度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']);
}
}
html:
<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)))
答案
看来你的视图不会检查你的products
数组的变化。
所以我想说是手动触发它:
InjectChangeDetectorRef手动触发变化检测。
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();
...
}
另一答案
你正在比较e!= e ['products']。id ..这不是真的。我认为你应该检查在你的“e”中保存id的变量
意思是
e.id!= ......或类似的东西。
我希望它有效。
以上是关于在角度6中修改数组数据后,视图未更新的主要内容,如果未能解决你的问题,请参考以下文章