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と、角度がページに適用され始め、ページが読み込まれなくなります。

教訓:愚かなことをしないでください。

于 2013-06-26T00:58:24.490 に答える