0

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?

Victor Bredihin
  • 2,220
  • 21
  • 30

0 Answers0