为什么我需要在这里调用zone.run()?

时间:2017-07-24 21:27:28

标签: angular

所以,我正在写一些有棱角的东西。我遇到了一个我想要更好理解的问题。我知道你们中的一些人都会明白这一点,但我不能理解为什么这样做会这样。

首先,看一下代码。 Here is my app component

这是我的前两个问题。

  1. 在我的ngOnInit处理程序中,我订阅了一个Rx.Observable ......我想知道为什么模板中的*ngIf不会更新,除非我这样做手动zone.run()。这是正常的吗?或者这里有点奇怪。我希望这只是简单的工作。

  2. 当我尝试将区域注入我的AppComponent#constructor时,我遇到了运行时错误,因为我不知道如何将参数解析到我的应用程序组件。所以我必须将@Inject(NgZone)添加到开头。不知道为什么它没有简单地工作并且在没有添加@Inject语法的情况下注入它。任何人都知道那里有什么?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我不确定它是否是唯一的解决方案,但在考虑了几天后,它对我来说最有意义。我认为问题在于我订阅的可观察对象是在我导入zone.js之前创建的。所以...我只是将zone.js导入为第一件事,然后区域立即知道了来自observable的变化。

所以答案是:import 'zone.js'移到所有导入的顶部。