AngularJS加载进度条

时间:2013-11-05 00:30:40

标签: angularjs

使用AngularJS并使用$location.path('/path')进行重定向时,新页面需要一段时间才能加载,尤其是在移动设备上。

有没有办法添加进度条进行加载?也许像YouTube这样的东西?

5 个答案:

答案 0 :(得分:21)

对于YouTube提供的进度条,您可以查看ngprogress。然后,在您的应用配置之后(例如),您可以intercept route's events

做类似的事情:

app.run(function($rootScope, ngProgress) {
  $rootScope.$on('$routeChangeStart', function() {
    ngProgress.start();
  });

  $rootScope.$on('$routeChangeSuccess', function() {
    ngProgress.complete();
  });
  // Do the same with $routeChangeError
});

答案 1 :(得分:5)

由于@Luc的anwser ngProgress改变了一点,现在你只能注入ngProgressFactory,这必须用于创建ngProgress实例。与@Ketan Patil的答案相反,你只应该实例化ngProgress 一次

angular.module('appRoutes', ['ngProgress']).run(function ($rootScope, ngProgressFactory) { 

    // first create instance when app starts
    $rootScope.progressbar = ngProgressFactory.createInstance();

    $rootScope.$on("$routeChangeStart", function () {
        $rootScope.progressbar.start();
    });

    $rootScope.$on("$routeChangeSuccess", function () {
        $rootScope.progressbar.complete();
    });
});

答案 2 :(得分:0)

如果它是下一个需要时间加载的路线,例如在控制器运行之前进行ajax调用(解析路由上的config)然后使用$ route service的$ routeChangeStart,$ routeChangeSuccess和$ routeChangeError事件。

注册一个顶级控制器(在ng-view之外),监听这些事件并在$ scope中管理一个布尔变量。

将此变量与ng-show一起使用以覆盖“加载,请稍候”div。

如果下一个路由加载速度很快(即它的控制器快速运行),但控制器请求的数据需要很长时间才能加载,我担心,你必须管理控制器和视图中微调器的可见性状态。

类似的东西:

$scope.data = null;
$http.get("/whatever").success(function(data) {
    $scope.data = data;
});

<div ng-show="data !== null">...</div>
<div ng-show="data === null" class="spinner"></div>

答案 3 :(得分:0)

使用angular-loading-bar

这里的独立演示.. https://github.com/danday74/angular-loading-bar-standalone-demo

答案 4 :(得分:-1)

这是我在我的应用程序中使用的工作解决方案。 ngProgress是用于在更改网址时显示加载条的最佳库。

请记住注入ngProgressFactory而不是ngProgress,而不是Luc的解决方案。

angular.module('appRoutes', []).run(function ($rootScope, ngProgressFactory) {
    $rootScope.$on("$routeChangeStart", function () {
        $rootScope.progressbar = ngProgressFactory.createInstance();
        $rootScope.progressbar.start();

    });

    $rootScope.$on("$routeChangeSuccess", function () {
        $rootScope.progressbar.complete();
    });
});

更新2015年11月 - 在使用chrome计时分析此方法后,我发现这不是添加加载栏的正确方法。当然,访问者可以看到加载栏,但它不会与实际的页面加载时间同步。