【问题标题】:How to wait for a variable to set in angular如何等待变量以角度设置
【发布时间】:2019-02-10 20:48:06
【问题描述】:

AppInitializer 类

dataloadcomplete = false;

initializeApp() {
let promise = new Promise((resolve, reject) => {
Promise.all(promise).then(
  (res) => { dataloadcomplete = true; resolve() },
  (err) => { reject(); },
);
return promise;
}

可以激活路由

canActivate(route: ActivatedRouteSnapshot): Promise<Boolean> {
 // if data load completed return true else false;

}

想要在国家变更时重新初始化应用程序。

【问题讨论】:

  • 了解Subject及其用法jasonwatmore.com/post/2018/06/25/…
  • @Amit Chigadani 是的,但值多次更改
  • 有什么办法可以重试promise
  • 是的,这就是 Subject 为您所做的。您可以从一个组件发出任意多次。并且侦听器组件将订阅它并在每次发出新值时接收。它是一个异步编程。
  • 但就我而言,我想等到数据加载完成。如果完成,我将加载应用程序,否则不会。如果用户更改或国家/地区更改,则可以重新开始此数据加载,无需刷新 url

标签: javascript angular


【解决方案1】:

由于显示的代码数量很少,因此很难提出最佳行动方案,因为有多种选择。

首先,无论如何,请确保保存数据的类(在您的示例中为 1 类)是可注入服务。将其注入任何需要访问数据的组件中。

如果您需要加载一些数据并等待路由到特定组件,直到加载该数据,您可以使用路由解析器。

如果您需要等待任何应用程序加载完毕后再启动应用程序,您可以使用APP_INITIALIZER:Angular: How to correctly implement APP_INITIALIZER

如果您想更好地管理应用程序状态,请考虑使用名为 NgRx 的用于 Angular 的 Redux 库。您可以使用它来管理应用程序中的数据流。

【讨论】:

    【解决方案2】:

    如果您有多个 HTTP 调用,我认为,您可以使用forkJoin 将所有调用检索到一个点,然后使用EventEmitter 并从类 2 的函数中捕获事件。无需等待设置1 类的变量。

    您也可以在 Angular 中使用间隔,等到您获得类 2 变量的真实值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 2018-11-17
      • 1970-01-01
      • 2021-12-02
      • 2021-05-05
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多