1

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

$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+ 秒。我有什么方法可以加快这个过程?

4

2 回答 2

7

我遇到了同样的问题,路由在启动时有效,但在执行特定路由时变得很慢。由于它在开始时有效,我认为$route.reload();可能会成功。

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

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

于 2015-08-07T19:21:23.873 回答
2

我刚遇到这个问题。事实证明,这是因为我调用的函数是$location.url从 jQuery“ .on”(实际上是 jQLite)调用的。$digest如果您从需要调用$applyAsync(或$apply)执行“AngularJS 的东西”的循环之外的东西中调用,我已经忘记了如何使用 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");
    });
});
于 2017-04-09T15:51:42.603 回答