Angular,停止渲染,直到获得异步数据

时间:2015-10-18 21:15:04

标签: javascript angularjs angular-promise

我对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()”' 我错了什么?或者我怎样才能实现目标?

2 个答案:

答案 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"