Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.04.2019, 12:40
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 50

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

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

В таблице users указан как источник данных:[dataSource]="users"
На таблицу навешено событие подчитывания данных, которое динамически подгружает данные из БД.
Как сделать так, чтобы Observable<User[]> которые приходят из сервиса userService.getUserList суммировалось с данными, которые уже загружены?
Ответить с цитированием
  #2 (permalink)  
Старый 19.04.2019, 13:07
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,157

https://www.learnrxjs.io/operators/c...atestfrom.html
как-то так
userService.getUserList().pipe(withLatestFrom(users)).subscribe(([data1, data2) => {})
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2019, 16:13
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 50

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

userService.getUserList().subscribe( (data: User[]) => {
users.put(data);
});
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2019, 08:44
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,157

Можно тогда users представить как BehaviorSubject/Subject и прокидывать туда данные через next
Ответить с цитированием
  #5 (permalink)  
Старый 21.04.2019, 11:00
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 50

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

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

	constructor(private db: DbService){}
	read(): void{
		this.db.getUsers().subscribe( (data: User[]) => {
			this.users$.next(data);
		});
	}
}
Ответить с цитированием
  #6 (permalink)  
Старый 21.04.2019, 16:35
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,157

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет кол-ва элементов li из одного html файла в другой Creativeeart jQuery 1 01.12.2017 14:13
Из одного textarea в другой Chile Элементы интерфейса 19 21.11.2017 15:13
Перетаскивание изображения из одного div-a в другой div Lera78906 Элементы интерфейса 2 01.05.2017 17:59
Перенести скрипт с одного сайта на другой Vmmix Работа 0 03.03.2017 00:12
Копирование из одного input в другой input bar-boss Общие вопросы Javascript 7 08.04.2008 18:10