代码之家  ›  专栏  ›  技术社区  ›  dsollen

在角度上等待,直到加载元件?

  •  0
  • dsollen  · 技术社区  · 11 年前

    在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时打开的详细信息窗格中遇到异常。异常似乎是由于一个过滤器试图对成员进行过滤。杀死并发现成员的技能未定义。我假设问题是,一旦设置了enrichFinished,我们就打开详细信息选项卡,这是在设置member.skills=skill的then子句之前;因此,我们有一个数据竞赛,在我们尝试过滤的时候,技能可能还没有设置好。

    告诉angular在我实际生成并保存了所需的数据之前,等待在细节选项卡中运行过滤器的最干净的方法是什么?实际的富集方法在for循环中富集3-4个不同的变量。

    1 回复  |  直到 11 年前
        1
  •  0
  •   Grundy    11 年前

    您可以设置 $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;
        });
    };