AngularJS初始路由控制器未加载.后续的都可以

AngularJS initial route controller not loaded. Subsequent ones are fine

本文关键字:都可以 加载 路由 控制器 AngularJS      更新时间:2023-09-26

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

我不太清楚为什么会发生这种情况,可以在这里查看演示:http://osumo.paas.allizom.org

这以前还可以。我今天在一些和$routeProvider无关的组件上做了一些工作,结果它就坏了。

有人有什么想法吗?

谢谢。

因此,要回答这个问题,它相当。。有趣的问题实际上来自这一行: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开始应用于页面,这导致页面永远不会加载。

经验教训:不要做傻事。