Повторно отображать Nativescript ListView при изменении элемента ObservableArray

Вот как я визуализирую cases 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"


person Mutaz    schedule 11.10.2017    source источник


Ответы (2)


Вы пытались применить изменение в NgZone? Я использовал это для обновления массива (не ObservableArray), и соответствующий RadListView обновлялся автоматически.

this.ngZone.run(() => {

        this.dummyService.addFile(this.file).subscribe(
            (fileId) => {
                this.folder.push(this.file);
        },
        (error) => {
           this handleError(error);
        });
     });
person AceTheFace    schedule 11.10.2017
comment
Да-да !! Это ответ, спасибо. Работает так, как я хочу, и со ListView. Хотя я не понимаю, почему ngZone творит чудеса! - person Mutaz; 11.10.2017

Здесь вы захотите обеспечить неизменность. Поэтому, если вам нужно изменить первый объект в массиве, я бы сделал это. Я бы попробовал потом использовать оператор спреда.

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

это установит cases на новый экземпляр массива, который должен обновить список.

person JoshSommer    schedule 11.10.2017
comment
Я уже пробовал изменить экземпляр, но nativescript не перерисовывает представление, когда вы это делаете, пока вы не нажмете что-нибудь в пользовательском интерфейсе. Любого действия, которое вы делаете, достаточно для повторного рендеринга. Но просто изменить сам экземпляр недостаточно. Вместо обновления я также попытался сохранить тот же экземпляр, удалить старый объект и добавить новый объект в массив, но безуспешно. Ничего не будет повторно визуализировать представление, пока вы не выполните какое-либо действие с пользовательским интерфейсом! - person Mutaz; 11.10.2017