1

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

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

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

有没有人有任何想法?

谢谢。

4

1 回答 1

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会导致 Angular 开始应用于页面,从而导致页面永远不会加载。

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

于 2013-06-26T00:58:24.490 回答