我有一个非常奇怪的情况,我似乎无法弄明白。这是我的路线:
$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秒以上。有什么方法可以让我加快这个过程?
答案 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");
});
});