当数据不变时,我该如何重新渲染ngFor?

时间:2019-04-25 09:50:59

标签: angular typescript ngfor

概述:

我有一个列表,使用管道将两个数组与ngfor绑定在一起。我将数组绑定在typeID上。

一个数组列出了所有可用的类型,另一个数组保留了选定的类型以及一个附加选项。 注意:这些数组仅共享2个属性,即名称和ID

问题:

因为当第二个数组中的数据发生更改时,我的ngFor绑定到了第一个数组,所以什么也没有更新,因此在那一刻,我不得不回想起我的http方法,该方法获取与更新列表完全相同的数据。

我需要一种方法来强制重新渲染,而不必在第二个数组中的某些内容每次更改时都调用我的api

StackBlitz:

https://stackblitz.com/edit/angular-nxkwaf

4 个答案:

答案 0 :(得分:0)

您可以使用 ngIf setTimeout 进行ngFor重新渲染。致电override func viewDidLoad() { super.viewDidLoad() fsCalendarObject.placeholderType = .none } 而不是this.reload()

this.getPrimary()

ngIf

中包装 ngFor
reload() {
  this.show = false;
  setTimeout(() => this.show = true);
}

柱塞https://stackblitz.com/edit/angular-geuesx

答案 1 :(得分:0)

您可以从角铁芯导入VideoCapture并触发ChangeDetectorRef。这可能不是最佳方法,但应根据情况重新渲染组件

答案 2 :(得分:0)

您可以为此数组设置新的引用,它将重新呈现,

this.secondary = [...this.secondary];

答案 3 :(得分:0)

使用经过调整的onik解决方案版本,我设法用更少的代码行解决了这个问题

解决方案

do {
    let response = try JSONDecoder().decode(Response.self, from: data)
    print(response) // Response(id: "A40F8EBE-7E34-126B-FFA4-ADC7A4D58300", url: "https://backendlessappcontent.com/AABE5C4B-AA58-955C-FF16-27B64A185300/737368FE-4963-275B-FF3E-D909B3CCC500/files/qr_codes/9a53c126-1a67-4a71-8072-83c056db4338.png")
} catch {
    print(error)
}

Stackblitz

https://stackblitz.com/edit/angular-rydedr