AngularJS初始路由控制器未加载。后续的很好

时间:2013-06-25 23:56:12

标签: javascript angularjs

我有一个HTML5 pushState应用程序。由于某种原因,当我第一次加载时,负责我命中initiall的路由的控制器没有被加载。如果我点击一下,一切都很好。

我不确定为什么会这样,可以在这里查看演示:http://osumo.paas.allizom.org

这曾经没问题。我今天在一些与$routeProvider无关的组件上做了一些工作,它刚刚破坏。

有没有人有任何想法?

感谢。

1 个答案:

答案 0 :(得分:1)

所以回答这个问题,它变得非常有趣。问题实际上来自这一行:https://github.com/shuhaowu/osumo/commit/c539d8048696152ad75f13a6d965160381b89a21#L2L22

这样做的原因实际上是合乎逻辑的,尽管弄清楚这是一个很大的痛苦。基本上我正在做我不应该做的事情(经常发生这种情况)。

首先,代码是在初始化服务时设置语言环境。这本身并不重要,因为我们想将语言环境设置为navigator.language。此代码位于:https://github.com/shuhaowu/osumo/blob/c539d8048696152ad75f13a6d965160381b89a21/static/js/develop/services/appservice.js#L165

当调用此事件时,会触发一个事件,此事件将导致一组指令更改其文本。再次,这没什么大不了的。 https://github.com/shuhaowu/osumo/blob/c539d8048696152ad75f13a6d965160381b89a21/static/js/vendors/l10n.js#L23

麻烦来了。有问题的代码版本包括$rootScope.$$phase || $rootScope.$apply(),因为在设计库时,假设setLocale可以在角度世界之外调用,并且它希望有点神奇,以便事件在事件触发时正常工作。虽然我无法确定Angular到底发生了什么,但我的猜测是$scope.$$phase此时未设置,因为我们仍在初始化不同的组件。在此处调用$apply会导致角度开始应用于页面,从而导致页面永远不会加载。

经验教训:不要做愚蠢的事情。