1

这是我的渲染cases ObservableArray在我看来重新渲染Nativescript的ListView时ObservableArray项目改变

<ListView [items]="cases" class="list-group" *ngIf="cases"> 
    <ng-template let-case="item"> 

cases有这些值:

cases = [{id: 1, name: "Sam"}, {id: 2, name: "Romio"}]

我怎样才能让我的ListView重新呈现或以某种方式更新视图,当我更新这样的第一个项目?

cases[0]["name"] = "Michael"

回答

2

您是否尝试过在NgZone中应用更改?我用它来更新数组(不是ObservableArray),相应的RadListView自动更新。

this.ngZone.run(() => { 

     this.dummyService.addFile(this.file).subscribe(
      (fileId) => { 
       this.folder.push(this.file); 
     }, 
     (error) => { 
      this handleError(error); 
     }); 
    }); 
+0

Yesss !!这是答案,谢谢。它按照我的需要和ListView工作。虽然我不明白为什么ngZone做到了魔术! – Mutaz

0

你会想在这里执行不变性。所以如果你必须改变数组中的第一个对象,我会的。之后我会尝试使用传播运算符。

cases[0]["name"] = "Michael" 
cases = [...cases]; 

这会将cases设置为一个新的应该更新列表的数组实例。

+0

我已经尝试过更改实例,但是当你这样做时,nativescript不会重新渲染视图,直到你在UI中点击某个东西。您所做的任何操作都足以重新渲染。但仅仅改变实例本身是不够的。我也尝试保留同一个实例,并删除旧对象并将新对象添加到数组中,但没有成功。除非您对UI执行某些操作,否则没有什么是重新呈现视图! – Mutaz

相关问题