如何在AngularJS和Restangular中页面显示之前加载数据?

时间:2014-02-13 07:38:22

标签: javascript angularjs restangular

我一直在使用AngularJs和Restangular与PHP后端。 我正在调用一个基于route(detail / list)的函数来从Restangular中获取变量。

问题是如果数据库连接有延迟,页面显示为空白,并在数秒(2-3)秒后填充并显示数据,

导航到详细信息并返回列表页面时会重复此问题。

2 个答案:

答案 0 :(得分:3)

以下是在呈现页面之前如何解析数据的示例(无空白屏幕):

在渲染视图之前调用'resolve'函数。

$routeProvider.when('/admin/task/:id' , {
    templateUrl: '/app/task/admin-task-results.tpl.html',
    controller:'AdminTaskDetailsCtrl',
    resolve: {
        task: function($route, Restangular) {
            return Restangular.one('tasks', $route.current.params.id).get();
        }

    }
});

只需将已解析的对象(本例中的任务)作为参数传递给控制器​​:

module.controller('AdminTaskDetailsCtrl', function ($scope, task) { ... });

但是,我要指出,这种方法并不总是最佳解决方案,因为用户在更改路线后无法获得即时反馈。考虑在控制器中加载数据并显示微调器,直到数据到达。

答案 1 :(得分:0)

我假设你仍然需要等待加载数据,所以要在没有数据和加载日期的情况下绘制视图,以后可以在控制器构造函数中使用next:

$scope.$on('$viewContentLoaded', function(){
  // Load data into model here
});