要解决这个问题,你可以使用$q
(promise对象)和$http
服务来确保在ng-repeat
开始渲染之前获取到数据。
首先,创建一个名为getData
的函数,使用$http
服务发送GET请求并返回promise对象。在promise对象中,使用$q
服务的defer
方法创建一个延迟对象。当请求成功时,将数据作为参数传递给resolve
方法,如果请求失败则调用reject
方法。
接下来,可以在控制器中调用getData
函数,并使用.then
方法来处理promise对象的结果。当promise对象解决(即请求成功)时,将返回的数据分配给控制器的变量(例如$scope.data
)。这样,当ng-repeat
指令开始渲染时,数据就已经可用了。
下面是一个示例代码:
app.controller('MainController', function($scope, $http, $q) {
// 定义一个用于获取数据的函数
var getData = function() {
var deferred = $q.defer();
$http.get('url/to/data').then(function(response) {
// 请求成功时,将数据传递给resolve方法
deferred.resolve(response.data);
}, function(error) {
// 请求失败时,调用reject方法
deferred.reject(error);
});
return deferred.promise;
};
// 调用getData函数,并在promise解决时将数据分配给$scope.data
getData().then(function(data) {
$scope.data = data;
});
});
在上面的示例中,getData
函数发送一个GET请求到指定的URL,并返回一个promise对象。在promise解决时,将数据分配给$scope.data
。这样,在ng-repeat
开始渲染之前,数据就已经被成功获取了。
确保将url/to/data
替换为实际的数据源URL。