Я не получаю значение ответа в компоненте с BehaviorSubject. Получил и сдал в сервис.
Я запускаю HTTP из службы на защите маршрута.
оказание услуг:
@Injectable()
export class ProjectsService {
projects: Subject<Project[]> = new BehaviorSubject<Project[]>([]);
load(clientId: string, active: boolean): Observable<boolean> {
return new Observable<boolean>((obs) => {
this._api.send(active ? 'projects.getActive' : 'projects.getAll',clientId).subscribe(
res => {
let temp = [];
res.forEach(a => temp.push(new Project(a)));
if (active) this.projects.next(temp);
else this.externalProjects.next(temp);
obs.next(true);
obs.complete();
},
err => {
obs.next(false);
obs.complete();
}
);
});
}
составная часть:
ngOnInit(): void {
// todo: check why not to load already added
this._projectsListener = this._projectsService.projects.subscribe(a => {
this.showIntro = a.length ? false : true;
this.projects = a;
});
}
HTML:
<div class="project" [hidden]="!showIntro" *ngFor="let project of projects>
{{project.title}}
</div>
Он просто получает параметр запроса для параметров HTTP... Guard:
@Injectable()
export class ProjectsGuard implements CanActivate {
constructor(
private _projectsService: ProjectsService,
private _router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this._projectsService.load(next.params['id'], true)
}
}
Я также пробую NgZone
, но я не уверен, что это правильный путь:
load(clientId: string, active: boolean): Observable<boolean> {
return this._api.send(active ? 'projects.getActive' : 'projects.getAll',clientId)
.map(res => {
let temp = res.map(a => new Project(a));
this._ngZone.run(() => {
console.log('temp: ', temp);
if (active) this.projects.next(temp);
else this.externalProjects.next(temp);
});
return true;
})
.catch(() => Observable.of(false));
}
load()
называется? Почему вы используете так много вложенных наблюдаемых? - person Meir   schedule 19.12.2016