I have a resolver that looks like this:
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { User } from './user';
@Injectable()
export class UserResolver implements Resolve<User> {
constructor(private httpClient: HttpClient) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<User> {
const userId = +route.params['userId'];
return this.httpClient.get<User>('/api/user/single/userId/' + userId);
}
}
I'm using it like this in a RouterModule:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { SmsComponent } from './sms.component';
import { SmsSentComponent } from './sms-sent/sms-sent.component';
import { SmsNewComponent } from './sms-new/sms-new.component';
import { SmsPlannedComponent } from './sms-planned/sms-planned.component';
import { UserResolver } from '../users/user.resolver';
const routes: Routes = [
{
path: '',
component: SmsComponent,
children: [
{ path: 'sent', component: SmsSentComponent },
// https://stackoverflow.com/questions/34208745/angular-2-optional-route-parameter
{ path: 'new/:userId', component: SmsNewComponent, resolve: { user: UserResolver } },
{ path: 'new', component: SmsNewComponent },
{ path: '', component: SmsPlannedComponent }
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
providers: [
UserResolver
]
})
export class SmsRoutingModule { }
And then I fetch the user inside ngOnInit() inside a component like this:
this.activatedRoute.data
.subscribe((user: User) => {
console.log(user);
});
When I console.log the user it seems to work, but if I console.log this:
this.activatedRoute.data
.subscribe((user: User) => {
console.log(user.cellphone);
});
Then I get undefined. It seems like the User is not ready when I run the console.log, is it not the whole point of resolving to have it ready when component loads? How can I have the User Object ready inside ngOnInit() as expected?
This is the User class by the way:
export class User {
constructor(
public id: number = 0,
public email: string = '',
public firstname: string = '',
public lastName: string = '',
public cellphone: string = '',
public companyName: string = '',
public address: string = '',
public hasHeating: boolean = false,
public heatingLastService: string = '',
public createdTime: number = 0,
public isCreatedByAdmin: boolean = false,
public isDeleted: boolean = false
) { }
}