Способы подписки на изменения без необходимости перебирать массив объектов в каждом компоненте - PullRequest
0 голосов
/ 04 декабря 2018

допустим, у нас есть массив объектов, как показано ниже:

[
    0: {'id': 0, 'title': 'ABC', value: '113' },
    1: {'id': 1, 'title: 'BCD', value: '242' },
    ...
    99: {'id': 99, 'title: 'ZAQ', value: '971' },
]

Массив объектов - это информация, необходимая в различных компонентах приложения.Например, component A нужно только получить обновленные данные id=0, тогда как component B нужно только id=2, id=6.Массив объектов будет меняться со временем, поэтому существует субъект, который его содержит.

Массив измененных объектов отправляется различным компонентам, как показано ниже:

   private testSubject = new Subject<any>();

   public notifyTestChanged(changedData: any): void {
       this.testSubject.next(changedData);
   }

   public onTestChanged(): Observable<any> {
       return this.testSubject.asObservable();
   }

Другой компонентподписаться на testSubject чтобы получить массив, и я перебираю массивы, чтобы найти, существует ли объект в массиве измененных объектов.

onTestChanged.subscribe((changedData) => 
   changedData.find((data) => 
      return componentchanged.id === data.id))
 // componentchanged.id is a parameter in the component, an identity for component.

Есть ли способ подписаться на изменения без необходимости зацикливаниячерез массив объектов в каждом компоненте, чтобы получить нужные данные, необходимые компоненту?Я избегаю создания 1 субъекта для каждого объекта, поскольку массив объектов может содержать сотни объектов.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я думаю, что вам лучше всего использовать ngrx.вы можете найти их документы здесь https://ngrx.io/guide/store. Ваш объект хранится в памяти (хранится) через ваше приложение.И если магазин когда-либо будет обновлен, он автоматически обновит тот, кто использует его в приложении.Проверьте это, похоже, это вам очень поможет.есть куча кода, который нужно написать, но тогда он прекрасно работает.

0 голосов
/ 04 декабря 2018

Observables обеспечивают поддержку передачи сообщений между издателями и подписчиками в вашем приложении.Observables предлагают значительные преимущества по сравнению с другими методами обработки событий, асинхронного программирования и обработки нескольких значений.

Идея похожа на подписку на газету.Если вы подписались в любое время, когда изменилась информация о новом документе или массиве, она публикуется на все, что подписано.

Вот репозиторий gitHub с рабочими примерами https://github.com/NativeScript/nativescript-sdk-examples-js/tree/master/app/ns-framework-modules-category/observable-array/basics

или ознакомьтесь с примером Iнашел здесь https://angular.io/guide/observables

А вот еще один пример, который я нашел здесь https://docs.nativescript.org/ns-framework-modules/observable-array

const ObservableArray = require("tns-core-modules/data/observable-array").ObservableArray;

// Create ObservableArray with lenght
let myObservableArray = new ObservableArray(10);

// Create ObservableArray from array.
const arr = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34];
myObservableArray = new ObservableArray(arr);
// Create ObservableArray from arguments.
myObservableArray = new ObservableArray(1, 2, 3, 5, 8, 13, 21, 33, 55, 89);


const firstItem = myObservableArray.getItem(0);
const secondItem = myObservableArray.getItem(1);
const thirdItem = myObservableArray.getItem(2);

myObservableArray.on(ObservableArray.changeEvent, (args) => {
console.log(args.index); // Index of the changed item (in this case 7).
console.log(args.action); // Action (In this case "update")
console.log(args.addedCount); // Number of added items (In this case 1).
console.log(args.removed); // Array of removed items (in this case 33).
});    
myObservableArray.setItem(7, 34); // at seventh (7) index setting value of 34
...