Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代内部的Angularjs更新范围_Javascript_Angularjs_Angularjs Scope_Angularjs Digest - Fatal编程技术网

Javascript 迭代内部的Angularjs更新范围

Javascript 迭代内部的Angularjs更新范围,javascript,angularjs,angularjs-scope,angularjs-digest,Javascript,Angularjs,Angularjs Scope,Angularjs Digest,在下面的代码中,我尝试获取每个问题的子问题列表并在视图中显示它们,但我在更新每个问题的子问题时遇到问题,它不会更新,所以我为所有问题获取相同的子问题列表 如何显示每个问题并列出其下的所有子问题 function loadAllQuestionGroup () { Questiongroup.query({}).$promise.then(function(group){ vm.questiongroups = group; for(var i=0;i&

在下面的代码中,我尝试获取每个问题的子问题列表并在视图中显示它们,但我在更新每个问题的子问题时遇到问题,它不会更新,所以我为所有问题获取相同的子问题列表

如何显示每个问题并列出其下的所有子问题

  function loadAllQuestionGroup () {
    Questiongroup.query({}).$promise.then(function(group){
        vm.questiongroups = group;
        for(var i=0;i<group.length;i++){
           var grouptitle=group[i].title
            Question.questionsByQuestionGroup({id:group[i].id}).$promise.then(function(question){
                vm.question = question; 
               for(var j=0;j<question.length;j++){    
                  Subquestion.subquestionsByQuestion({id:question[j].id}).$promise.then(function(subquestion){
                      vm.subquestions=subquestion;
                    });                        
              }
         });
        }
      });
    }

 <div ng-repeat="question in vm.question">
   {{question.name}}
   <div ng-repeat="subquestion in vm.subquestions">
     {{subquestion.name}}
   </div>
 </div>
函数loadAllQuestionGroup(){
Questiongroup.query({})。$PROMITE.then(函数(组){
vm.questiongroups=组;

对于(var i=0;i来说,这似乎不是与角度范围相关的问题,而是您遇到问题的纯javascript范围。如果您在循环中进行异步调用,则每次都会收到最后一个元素。要修复它,您应该在循环中使用匿名函数包装承诺

检查这个经典示例(您可以认为setTimeout函数相当于您的
问题.questionsByQuestionGroup({id:group[i].id})。$promise
,它们都是异步函数)

//这与您的情况相当
//在本例中,它将每次返回最后一个元素,在本例中为5
对于(变量i=0;i<5;i++){
setTimeout(函数(){
控制台日志(i)
});
}
//结果:5
//这就是重构的方法
//为async创建一个包装器,它将根据需要工作
对于(var j=0;j<5;j++){
(功能(索引){
setTimeout(函数(){
console.log(索引)
});
})(j) );
}

//结果:0 1 2 3 4
看起来这不是与角度作用域相关的问题,而是您遇到问题的纯javascript作用域。如果您在循环中进行异步调用,则每次都会收到最后一个元素。若要解决此问题,应在循环中使用匿名函数包装承诺

检查这个经典示例(您可以认为setTimeout函数相当于您的
问题.questionsByQuestionGroup({id:group[i].id})。$promise
,它们都是异步函数)

//这与您的情况相当
//在本例中,它将每次返回最后一个元素,在本例中为5
对于(变量i=0;i<5;i++){
setTimeout(函数(){
控制台日志(i)
});
}
//结果:5
//这就是重构的方法
//为async创建一个包装器,它将根据需要工作
对于(var j=0;j<5;j++){
(功能(索引){
setTimeout(函数(){
console.log(索引)
});
})(j) );
}

//结果:0 1 2 3 4
需要将单个问题推送到问题列表中。为每个单个问题创建子问题列表。需要将单个子问题推送到各自的列表中

function loadAllQuestionGroup () {
    Questiongroup.query({}).$promise.then(function(group){
        vm.questiongroups = group;
        //Initialize question list
        vm.questionList = [];
        for (var i=0;i<group.length;i++){
            var grouptitle=group[i].title;
            Question
              .questionsByQuestionGroup({id:group[i].id})
              .$promise
              .then(function(question){
                //Push question to list
                vm.questionList.push(question); 
                for (var j=0;j<question.length;j++) {
                    //Initialize subquestion list
                    question.subquestionList = [];
                    Subquestion
                        .subquestionsByQuestion({id:question[j].id})
                        .$promise
                        .then(function(subquestion){
                             //Push subquestion to list
                             question.subquestionList.push(subquestion);
                        })
                   ;                        
                };
              })
            ;
        }
    });
}

请注意,
子问题列表
属性已添加到
问题列表
中的每个
问题,需要将单个问题推送到问题列表。为每个单个问题创建子问题列表。需要推送单个子问题d到各自的列表中

function loadAllQuestionGroup () {
    Questiongroup.query({}).$promise.then(function(group){
        vm.questiongroups = group;
        //Initialize question list
        vm.questionList = [];
        for (var i=0;i<group.length;i++){
            var grouptitle=group[i].title;
            Question
              .questionsByQuestionGroup({id:group[i].id})
              .$promise
              .then(function(question){
                //Push question to list
                vm.questionList.push(question); 
                for (var j=0;j<question.length;j++) {
                    //Initialize subquestion list
                    question.subquestionList = [];
                    Subquestion
                        .subquestionsByQuestion({id:question[j].id})
                        .$promise
                        .then(function(subquestion){
                             //Push subquestion to list
                             question.subquestionList.push(subquestion);
                        })
                   ;                        
                };
              })
            ;
        }
    });
}

请注意,
子问题列表
属性被添加到
问题列表
中的每个问题

中。请尝试使用$scope。$apply()更新子问题后。我已尝试,但我得到空数据get$digest已在进行中。您可以提供plunker或JSFIDLE吗?请使用$scope进行尝试。$apply()在更新子问题之后。我已经尝试了,但是我得到了空数据。get$digest已经在进行中。您可以提供plunker或JSFIDLE吗?我提供了,索引打印了0,1,2,3,但范围仍然没有update@Ali-Alrabi还有一件事我注意到了,您正在将子问题分配给数组:
vm.subquestions=subquestion;
如果您想将不同的子问题分配给数组ems,您应该推送它,而不是分配我所做的和索引打印0,1,2,3,但范围仍然没有update@Ali-Alrabi还有一件事我注意到了,您正在将子问题分配给数组:
vm.subquestions=subquestion;
如果您想拥有不同项目的数组,您应该将其推送到not assign