Я создаю приложение чата с nativescript, где я могу загружать больше сообщений определенным методом. Эти вновь загруженные сообщения добавляются в начало массива messages. Теперь, как только меняется массив сообщений, из которого список получает свои элементы, он выдает ошибку:
ОШИБКА TypeError: Невозможно прочитать свойство 'length' из неопределенного`
ERROR CONTEXT {
JS: "view": {
JS: "def": {
JS: "nodeFlags": 38518785,
JS: "rootNodeFlags": 1,
JS: "nodeMatchedQueries": 0,
JS: "flags": 0,
JS: "nodes": [
JS: {
JS: "nodeIndex": 0,
JS: "parent": null,
JS: "renderParent": null,
JS: "bindingIndex": 0,
JS: "outputIndex": 0,
JS: "checkIndex": 0,
JS: "flags": 1,
JS: "childFlags": 38518785,
JS: "directChildFlags": 33554433,
JS: "childMatchedQueries": 0,
JS: "matchedQueries": {},
JS: "matchedQueryIds": 0,
JS: "references": {},
JS: "ngContentIndex": null,
JS: "childCount": 2,
JS: "bindings": [],
JS: "bindingFlags": 0,
JS: "outputs": [],
JS: "element": {
JS: "ns": "",
JS: "name": "StackLayout",
JS: "attrs": [],
JS: "template": null,
JS: "componentProvider": null,
JS: "componentView": null,
JS: "componentRendererType": null,
JS: "publicProviders": {},
JS: "allProviders": "[Ci...
Это мой метод
this.moreMessagesSub = this.socket.more_messages_receiver$.subscribe(
(messages: Message[]) => {
this.currentRoom.messages = messages.concat(this.currentRoom.messages); // This leads to the error.
this.listViewComponent.nativeElement.notifyPullToRefreshFinished();
this.changeRef.detectChanges();
}
);
И здесь я покажу вам свой просмотр списка.
<StackLayout row="0" col="0" colSpan="2">
<RadListView #chatListView pullToRefresh="true" (pullToRefreshInitiated)="onPullToLoadMore()" [items]="currentRoom.messages" separatorColor="white" height="100%">
<ng-template tkListItemTemplate let-message="item" let-i="index">
<StackLayout>
<ns-chat-message [message]="message" ></ns-chat-message>
</StackLayout>
</ng-template>
</RadListView>
</StackLayout>
Когда я удаляю строку this.currentRoom.messages = messages.concat(this.currentRoom.messages);
Я не получаю ошибок.
Я также попытался использовать array.unshift, но это точно такой же результат. Так почему же просмотр списка nativescript теряет массив при обновлении? Это, очевидно, просто на очень короткий промежуток времени. После ошибки и некоторого отставания она продолжает работать как ожидалось и даже успешно добавила сообщения в операционную систему