Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Данные из одного потока направить в другой (https://javascript.ru/forum/angular/77328-dannye-iz-odnogo-potoka-napravit-v-drugojj.html)

sniffysko 19.04.2019 12:40

Данные из одного потока направить в другой
 
Имеется компонент Angular с таблицей. Данные таблицы хранятся в
users: Observable<User[]>

Также имеется сервис подчитывания данных из БД.
userService.getUserList(start, limit): Observable<User[]>

В таблице users указан как источник данных:[dataSource]="users"
На таблицу навешено событие подчитывания данных, которое динамически подгружает данные из БД.
Как сделать так, чтобы Observable<User[]> которые приходят из сервиса userService.getUserList суммировалось с данными, которые уже загружены?

destus 19.04.2019 13:07

https://www.learnrxjs.io/operators/c...atestfrom.html
как-то так
userService.getUserList().pipe(withLatestFrom(users)).subscribe(([data1, data2) => {})

sniffysko 19.04.2019 16:13

Уточнение к вопросу
 
Правильно ли я понимаю, что на основе этой строки сформируются данные, на которые мы можем подписаться и получить в итоге данные двух массивов? Это немного не то, что надо было. Я не точно выразился. Вопрос надо уточнить как следующий:
Как сделать так, чтобы содержимое потока, который возвращает userService.getUserList(start, limit) запихнуть в поток users.
Т.е. получили данные и при помощи гипотетической функции put запихнули их в users:

userService.getUserList().subscribe( (data: User[]) => {
users.put(data);
});

destus 20.04.2019 08:44

Можно тогда users представить как BehaviorSubject/Subject и прокидывать туда данные через next

sniffysko 21.04.2019 11:00

Спасибо за ответ. Предварительно перечитав доки пришел к такому же выводу. Получилось примерно так:

export class AppComponent {
	users$ = new Subject<User[]>();

	constructor(private db: DbService){}
	read(): void{
		this.db.getUsers().subscribe( (data: User[]) => {
			this.users$.next(data);
		});
	}
}

destus 21.04.2019 16:35

можно даже так (смысл тот же, просто короче)
read(): void{
		this.db.getUsers().subscribe(this.users$);
	}


Часовой пояс GMT +3, время: 03:53.