我对AngularJS有疑问。我想为某些数组进行ng-repeat。但是这个数组的数据来自控制器中的firebase。 问题是,当页面呈现时,iam仍然在等待来自firebase的数据的异步函数。
控制它的最佳方法是什么? 我尝试使用promisses,但是在我从firebase获取数据之前出现了错误并且页面已经呈现。
即
$scope.games = [];
function getOnce(){
var defer = $q.defer();
ref.once("value", function(data) {
defer.resolve();
$scope.games.push('test');
});
return defer.promise;
}
$scope.getdata = getOnce().then(function(data){
console.log('success');
console.log(data);
});
我在init上调用'$ scope.getdata'函数'data-ng-init =“getdata()”' 我错了什么?或者我怎样才能实现目标?
答案 0 :(得分:2)
在方法解析中传递数据。然后用数据响应填充数组。
$scope.games = [];
function getOnce(){
var defer = $q.defer();
ref.once("value", function(data) {
defer.resolve('test');
});
return defer.promise;
}
$scope.getdata = getOnce().then(function(data){
$scope.games.push(data);
console.log('success');
console.log(data);
});
答案 1 :(得分:0)
您可以使用ng-show
隐藏您在重新加载数据时不希望看到的页面部分。或ng-if
如果您的指令要求在link
/ controller
function
按角度运行时加载数据。
这是否符合您的需求?
您需要公开是否已使用以下内容加载$scope
:
$scope.isDoneLoading = false;
$scope.getdata = getOnce().then(function(data){
// ...
$scope.isDoneLoading = true;
});
然后你会这样做:
ng-if="isDoneLoading"
或者根据您的需要:
ng-show="isDoneLoading"