角度2:延迟组件加载

时间:2016-09-16 11:41:25

标签: angular

我正在尝试从Angular 2应用程序中的服务器加载配置文件,并且您可以想象它包含整个应用程序所需的初始化参数,因此必须先加载它。

问题是JS在设计上是异步的,所以没有办法使应用程序“等待”首选项文件。我已经创建了一个使用异步AJAX请求发送请求的服务,但我还不知道在缓存仍未加载时如何处理其他部分要求此服务“这是此首选项的值”。我无法拒绝请求,我无法阻止它们,使它们异步不起作用。

应该有一种方法可以在“加载”屏幕中停止应用程序,我相信这是正确的方法。当应用程序处于此模式时,将加载首选项,然后显示UI。

问题:在装载阶段结束之前,如何推迟加载主要部件?加载一个检查一系列必需品并初始化服务(连接,设置,身份验证等)的组件会很好,然后在满足它们之后加载主UI。

1 个答案:

答案 0 :(得分:1)

在Angular2 Dart中,我使用Future使其工作;然后无论什么要求该属性只需要await该值。 请参阅:https://www.dartlang.org/tutorials/language/futures

Future gatherNewsReports() async {
  // more slow code here
  String path =
      'https://www.dartlang.org/f/dailyNewsDigest.txt';
  return (await HttpRequest.getString(path));
}

Future printDailyNewsDigest() async {
  String news = await gatherNewsReports();
  print(news);
}

如果您不使用Dart,我相信您可以使用JavaScript中的Promises执行相同操作。 请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

async function printDailyNewsDigest() {
  var news = await gatherNewsReports();
  console.log(news);
}

完成未来/承诺后,触发URL更改,然后加载所需的页面。

JavaScript和Dart是SingleThreaded,如果你在任何时候阻止,任何东西都不会继续工作。