If this.contacts
is an Observable of list of objects (contacts: Observable<Items[]>
) and you want to make some changes to that list, you can simply use tap
:
import { tap } from 'rxjs/operators';
this.contacts.pipe(tap(usersList => {
usersList.push(newItem);
}));
But if you want to make another request to the server and merge these lists, you can use merge
:
import { merge } from 'rxjs';
merge(
this.contacts,
this.http.get('https://jsonplaceholder.typicode.com/other_users');
).pipe(
map(data => {
const [currentResult, pastResult] = data;
// ...
}
));
Update
Based on your comment for more details, you don't need to do anything with observables. What you need is something like this:
In your contacts.service.ts
:
getContacts(){
return this.http.get('https://jsonplaceholder.typicode.com/users');
}
In your contacts.component.ts`:
contacts: any[] = [];
ngOnInit() {
this.contactsService.getContacts().subscribe(data => {
this.contacts = data;
});
}
addContact(item) {
this.contacts.push(item);
}
But if you want to have your contacts list as an Observable, you should use a Subject
.
In your contacts.service.ts
:
contactsChange$ = new Subject<any>();
private contactsList = [];
getContacts(){
return this.http.get('https://jsonplaceholder.typicode.com/users').pipe(tap(data => {
this.contactsList = data;
this.contactsChange$.next(this.contactsList);
}));
}
addContact(item) {
this.contactsList.push(item);
this.contactsChange$.next(this.contactsList);
}
In your contacts.component.ts`:
contacts: any[] = [];
ngOnInit() {
this.contactsService.getContacts().subscribe(data => {this.contacts = data});
this.contactsService.contactsChange$.subscribe(data => {this.contacts = data});
}