【问题标题】:Angular 2 get value from url with promise and awaitAngular 2 通过 promise 和 await 从 url 获取价值
【发布时间】:2017-05-28 20:57:24
【问题描述】:

所以我试图从 url 中获取值,我想用 promise 和 async/await 来做到这一点。但是当我在 chrome 和 opera 中运行它时,它只是站在那里等待。 任何人都可以指出我正确的方向还是我做错了什么?

我的组件实现:实现 OnInit

构造函数:

constructor(private route: ActivatedRoute, 
            private zone : NgZone
            ) 
            {

            }

进口:

import { Component, OnInit, NgZone } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs/Rx';

方法:

async ngOnInit() 
{
    var Id : string = await this.getIdFromUrl(); 
}


getIdFromUrl() : Promise<string> 
    {
        return this.route.params.map(params => 
        {   
            return params['id']; 
        }).toPromise();  
    }

【问题讨论】:

标签: angular typescript


【解决方案1】:

ngOnInit 应该返回 void。设为async 表示XY 问题,这deviates from the interface 因为异步ngOnInit 返回一个promise 并导致潜在的未捕获promise 错误。如果有应在初始化时解决的承诺,则可以将它们设置为解析器。

route.params 是一个 observable,因为它在使用不同参数导航到同一条路线时会发出多个值。它没有完成,调用toPromise() 将导致未完成的承诺。因此,observables 不能与 Promise 互换。

初始参数值在组件初始化时已知并且是同步的。可通过ActivatedRouteSnapshot interface 访问,

ngOnInit() {
    const id: string = route.snapshot.params.id;
}

根据路由的使用方式和route reuse strategy,这可能无法按预期工作,因为不会处理后续参数更改。出于这个原因,通常最好坚持使用route.params observable。

【讨论】:

  • 感谢您的宝贵时间,解决了很多问题 :)
  • 不幸的是,这对我不起作用。 const syncRoute: any = this._route.snapshot; 没有显示参数,我必须用 this._route.queryParamMap.subscribe(parameter =&gt; {.. 异步收听它们,因此在我的 ngOnInit() 中有大量的赛车条件。该 URL 被简单地调用,其中的值没有任何变化。
  • @NikitaFuchs 这取决于您的情况。在某些情况下,组件初始化时参数不可用。参见备注,根据路由的使用方式和路由重用策略,这可能无法按预期工作,因为不会处理后续参数更改
猜你喜欢
  • 2017-10-11
  • 2018-02-24
  • 1970-01-01
  • 2018-01-04
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
相关资源
最近更新 更多