Angular 2, как обновить массивы Observables? - PullRequest
0 голосов
/ 24 марта 2019

Стек: Angular,Nativescript, Typescript.

Я получаю идентификаторы от localStorage, а затем для каждого id я звоню HTTP просьбе получить этот предмет от API.Все работает нормально, но я хочу сделать так, чтобы и (LocalStorageArray идентификаторов, и элементы из запроса Http) были бы подписками, и они будут следить за изменениями.Например: если есть новый localStorage идентификатор, он будет вызывать HTTP с этого идентификатора, а затем добавить к моему observable array.

Мой пример работает, но не так, как я хочу, потому что это не такобновление моего ObservableArray после добавления элемента в мой localStorage.Я искал ответы на StackOverflow, как подписаться на массив и вызывать функцию каждый раз, когда он изменяется, но ни один не помог.Просмотренные ссылки:

https://docs.nativescript.org/angular/ui/professional-ui-components/ng-ListView/getting-started

https://appdividend.com/2018/12/08/angular-7-observables-tutorial-with-example/

https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Responding_to_storage_changes_with_the_StorageEvent

Мой пример:

Home.component.ts:

data;
    public filteredItems : ObservableArray<Observable> = new ObservableArray([]);
    localStorageArray = [];
 public getStorageArray(){
     this.localStorageArray = new Array;
        console.log(localStorage.length)
        for (let i = 0; i < localStorage.length; i++) {
            let key = localStorage.key(i);
            let val = localStorage.getItem(key);
            this.localStorageArray.push(val);
        }
        console.log('Local storage array', this.localStorageArray);
        if(this.localStorageArray.length != 0) {
            this.getFavorites(this.localStorageArray);
        }
    }

    getFavorites(eanArray){
        if(this.localStorageArray.length > 1){
            this.data = this.dataService.getProductsByEan(eanArray).subscribe
            ((data: any) => {
                    this.filteredItems = data['hydra:member'];
                    console.log(this.filteredItems.length);
            }, (error) => {
                console.log(error)
            }, () => {
                console.log('favorites succes')
            });
        }
      }

А затем я пытаюсь обновить this.filteredItems из другого компонента:

List.component.ts:

providers: [HomeComponent],
constructor(private home: HomeComponent){}

1. ничего не происходит, не обновляется:

updatefilteredItems(item){
console.log(this.home.filteredItems.length) --> 0 , but it has items.
this.home.filteredItems.push(item)
console.log(this.home.filteredItems.length) --> 1 , but it has more items.
}
ничего не происходит, это не обновление:
updatefilteredItems(){
this.home.getStorageArray();
}

Я ожидал, что когда я обновлю this.filteredItems, он обновит его, но не сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...