如果使用异步数据,则为ng ng?

时间:2018-06-06 10:23:29

标签: angular typescript angular-services ngif

在我的棱角分明navbar我有一个*ngIf,而不是登录/退出按钮应显示

*ngIf="!authService.loggedIn()

它使用具有此loggedIn函数的服务,该函数返回true或false

  loggedIn() {
    return this.http.get('http://localhost:3000/users/validateToken')
      .map(res => res.json()).map(data => data.success);
  }

这是异步的,我如何让ngIf等待它?或者我怎样才能得到相同的结果?

2 个答案:

答案 0 :(得分:3)

模板中的运行功能是一种不好的做法。您可以拥有一个与用户状态相对应的变量,并将data.success存储在那里。将异步函数调用ngOnInit并将结果分配给变量。

ngOnInit() {
   return this.http.get('http://localhost:3000/users/validateToken')
      .map(res => res.json()).subscribe(data => this.isLoggedIn = data.success);
}

模板就像

*ngIf="isLoggedIn"

等待异步函数的响应怎么样,你不必担心它,如果结果将被分配给变量 - DI机制将检测到该更改并更新模板

建议我想从res.json()开始,你不是HttpClient,而是Http,不推荐使用HttpClient。使用HttpClientModulevar config = new MapperConfiguration(cfg => { cfg.CreateMap<Case, FactsCase>() .ForMember(d => d.Subjects, opt => opt.ResolveUsing(s => s.Persons)) .ForMember(d => d.FinancialReports, o => o.MapFrom(t => t.FinancialReport)) .ForMember(d => d.CaseLogs, opt => opt.ResolveUsing(new CaseLogToFactsResolver())) .ReverseMap() .ForMember(d => d.Claim, opt => opt.ResolveUsing(new ClaimCaseLogResolver())) .ForMember(d => d.Policy, opt => opt.ResolveUsing(new PolicyCaseLogResolver())) .ForMember(d => d.Persons, opt => opt.ResolveUsing(new PersonResolver())); }

答案 1 :(得分:0)

您可以使用async管道,因为if request返回一个observable。

*ngIf="!authService.loggedIn() | async"