here is my resolver
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { ContractService, UserContract } from './';
@Injectable()
export class UserContractsResolver implements Resolve<UserContract> {
constructor(private contractsService: ContractService) {}
public resolve(): any {
return this.contractsService.getUserContracts().map(contracts => {
return contracts;
}).first();
}
}
and my service
@Injectable()
export class ContractService {
public userContracts: ReplaySubject<User> = new ReplaySubject(1);
constructor(private http: AuthHttp) {}
public getUserContracts() {
if (!this.user.observers.length) {
this.http.get('url')
.map(response => response.json())
.subscribe(contracts => {
this.nextUserContracts(contracts);
});
}
return this.userContracts;
}
}
and my component
export class Test implements OnInit {
constructor() {
// option1: get data from router
this.route.data.subscribe(data => {
console.log(data['contracts']);
});
// option2: get data from service
this.contractService.getUserContracts().subscribe(contracts => {
console.log(contracts);
});
}
next() {
this.contractService.userContracts.next([]);
}
}
The problem is that when data (observable) updates (call next() function for example) I can catch it only with option2(service). Maybe I understand it wrong, but I want to catch it with option1(resolver).
Is it possible?