等待角度直到元素加载?

时间:2015-03-24 16:48:18

标签: javascript angularjs

在angular中,我们有一个rich方法,它运行一些rest函数来丰富数据对象,然后设置一个变量,这将导致隐藏的详细信息选项卡可见。像这样过于简化的例子:

$scope.enrich = function(team){
    angular.forEach(team.members, function(member){
        member.getSkills().then(function(skills){
            member.skills=skills;
        }
    });

    $scope.enrichFinished=true;
};

我在详细信息窗格中遇到异常,当enrichFinished为true时打开。例外似乎是由于过滤器试图过滤member.skill并发现该成员的技能未定义。我假设问题是我们在设置enrichFinished后立即打开详细信息选项卡,这是在设置member.skills = skill;的then子句之前。因此,我们有一个datarace,在我们尝试过滤技能时,可能还没有设置技能。

在我实际生成并保存我需要的数据之前,告诉角度等待在详细信息选项卡中运行过滤器的最简洁方法是什么?实际的富集方法在for循环中丰富了3-4个不同的变量。

1 个答案:

答案 0 :(得分:0)

您可以在所有承诺解决后设置$scope.enrichFinished=true;,以便您可以像这样使用$q.all

$scope.enrich = function(team){
    $q.all(team.members.map(
                function(member){
                    return member.getSkills().then(
                        function(skills){
                            member.skills=skills;
                        }
                    );                        
                }
            )
    ).then(function(){
        $scope.enrichFinished=true;
    });
};