我有一个 HTML5 pushState 应用程序。出于某种原因,当我第一次加载时,没有加载负责我最初点击的路由的控制器。如果我点击周围,一切都很好。
我不确定为什么会这样,可以在这里查看演示:http: //osumo.paas.allizom.org
这以前没问题。我今天在一些与 无关的组件上做了一些工作$routeProvider
,它刚刚坏了。
有没有人有任何想法?
谢谢。
我有一个 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 开始应用于页面,从而导致页面永远不会加载。
经验教训:不要做愚蠢的事情。