Стек: 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
, он обновит его, но не сделал.