For循环不能以适当的方式工作(Angular2)

时间:2016-05-23 11:41:31

标签: loops for-loop typescript angular

我想知道为什么我在For使用Angular2 (TypeScript)循环时会出现奇怪的行为。我做了这个循环

 loadAllQuestions() {

            this.questionService.loadAllQuestions()
                .map(res=>res.json())
                .subscribe(res=>{
                    this.listQuestion = res.questions;
                    for (var q in this.listQuestion){
                        this.propositionService.findPropositionByQuestion(this.listQuestion[q].wordingQ)
                            .map(res=>res.json())
                            .subscribe(res=>{
                                console.log(this.listQuestion[q]);
                            });
                    }
           });
     }

因此,对于每个Question(在listQuestion中),我调用了一个服务,可以使用其措辞(findPropositionByQuestion)找到此问题的所有命题(wordingQ) ;问题是,似乎循环不起作用,在制作console.log(this.listQuestion[q])时它只显示listQuestion中的最后一个问题,与listQuestion中的索引数量一样多(所以如果我有3个问题,它向我显示最后一个问题3次等等。)。 有关更多说明:此处我有2个已加载的问题:

enter image description here

这就是console.log向我展示的内容:

enter image description here

请帮忙吗?

3 个答案:

答案 0 :(得分:2)

您可以使用let关键字设置q变量块范围。

for (let q in this.listQuestion){ //var --> let
    this.propositionService
        .findPropositionByQuestion(this.listQuestion[q].wordingQ)
        .map(res=>res.json())
        .subscribe(res=>{
            console.log(this.listQuestion[q]);
         });
}

答案 1 :(得分:1)

您需要使用其他方法拆分代码:

loadAllQuestions() {
  this.questionService.loadAllQuestions()
    .map(res => res.json())
    .subscribe(res => {
      this.listQuestion = res.questions;
      for (var q in this.listQuestion) {
        this.findProposition(this.listQuestion[q]);
      }
    };
}

findProposition(question) {                          
  this.propositionService.findPropositionByQuestion(
    question.wordingQ)
      .map(res => res.json())
      .subscribe(res => {
        console.log(question);
        console.log(res);
      });
}

这个问题可以帮助您理解为什么您有多次在跟踪中显示相同的元素:

答案 2 :(得分:1)

我建议您尝试for (var q of this.listQuestion){...}而不是for (var q in this.listQuestion){...}