【问题标题】:Angular execute resolve with observableAngular 用 observable 执行解析
【发布时间】:2018-06-05 05:59:04
【问题描述】:

在 Angular 5 项目中,我想在加载视图之前执行解析器。问题是我想从解析器返回的数据取决于一个可观察的。这是代码:

解析器:

@Injectable()
export class PlayersResolver implements Resolve<any> {
  constructor(private playersSrv: PlayersService) {
    this.playersSrv.getStandings();
  }

  resolve() {
    return this.playersSrv.standings$;
  }
}

解析器使用的服务:

@Injectable()
export class PlayersService {
  standingsSubject = new ReplaySubject<any>();
  standings$ = this.standingsSubject.asObservable();

  constructor(private http: HttpClient) {}

  getStandings(): void {
    this.http.get('http://localhost:8080/api/fixtures/standings')
      .subscribe((response: any) => {
        this.standingsSubject.next(response);
      });
  }
}

当试图导航到视图时,使用此代码会显示任何内容。关于如何实现解析以获取组件中的数据的任何想法?

谢谢

【问题讨论】:

  • 相信我;您不想在服务内部订阅。
  • 嗨 Jota.Toledo,为什么不呢?

标签: angular observable angular-services resolver


【解决方案1】:

1.从服务函数返回 observable。 2.从服务中删除订阅。 3.只需在resolve方法中调用服务函数,返回对服务函数的调用,然后返回一个observable

resolve():observable<any>{
return  this.playersSrv.getStandings().map((data)=>{//do something with data})
}

4.Resolve Guard 自动订阅服务调用,下一个路由只有在解决后才会加载

【讨论】:

  • 对不起,它不起作用。 Property 'map' does not exist on type 'Observable&lt;Object&gt;'
  • 尝试不从服务中返回 observable...你导入了操作符吗?导入'rxjs/add/operator/map'; getStandings() { return this.http.get('localhost:8080/api/fixtures/standings')}
  • 哦,原来是这样。谢谢!!
猜你喜欢
  • 2016-12-28
  • 2020-11-17
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2020-07-23
  • 1970-01-01
相关资源
最近更新 更多