Angularjs有些路线加载缓慢

时间:2014-03-17 14:56:38

标签: angularjs routing route-provider

我有一个非常奇怪的情况,我似乎无法弄明白。这是我的路线:

$routeProvider.when(/application1/:type, {
          templateUrl: "application1/index.html"
        })
.when(/application1/:type/:folder, {
          templateUrl: "application1/index.html"
        })
.when(/application2, {
          templateUrl: "application2/index.html"
        })
.when(/application3, {
          templateUrl: "application3/index.html"
        });

出于某种原因,当我在application2和application3上使用$ location.path时,它工作正常并在我调用它时更新。但是,无论何时我在application1上切换到任何东西,它需要大约3-5秒,然后开始加载。当我刷新application1上的页面时,它立即工作,所以我不认为它是与它相关的代码。某些路线如何表现得如此不同?

更新:我在我的应用程序上运行了一个分析器:在application1中加载路由时,运行$ apply和/或$ digest似乎需要5秒以上。有什么方法可以让我加快这个过程?

2 个答案:

答案 0 :(得分:5)

我遇到的问题是路由在启动时工作但在执行特定路由时变得很慢。由于它在启动时起作用,我认为$route.reload();可能会起作用。

$route.reload();
$location.path("application1/");

这个修复对我有用。不要问我详细的解释。

答案 1 :(得分:2)

我刚刚遇到这个问题。事实证明这是因为调用$location.url的函数是从jQuery“.on”(实际上是jQLite)调用的。我已经忘记了如何使用AngularJS,如果你从$digest周期之外的某个东西调用,你需要调用$applyAsync(或$apply)来做“AngularJS的东西”。也许如果它不适合我的超时计时器那么根本就没有用(我认为当新的视图最终被处理时就开始了)。

我的案例中的修复是改变它(这是CoffeeScript,但在纯JavaScript中是相同的交易):

element.on 'hidden.bs.modal', () ->
    stuffIncludingLocationUrlCall()

到此:

element.on 'hidden.bs.modal', () ->
    scope.$applyAsync ->
        stuffIncludingLocationUrlCall()

现在,$location.url的视图更改发生得非常快。

编辑:这是一个Javascript& jQuery版本适用于那些遇到过这种情况的人,就像我做的那样......

$(element).on("click", function() {

    // any processing or other logic you need goes here

    $scope.apply(function() {
        $location.path("new/path");
    });
});