2017-10-06 7 views
1

によって解釈されません。ない簡単なHTMLページはこれに添付され、次の値は常に、私はそうのようなコントローラが持つ角度

<div ng-if="!controller.loading"> 
    <div ng-repeat="response in controller.responses"> 
     {{response}} 
    </div> 
</div> 

私の問題は、コンテンツが、約束は持っているデバッガで私が見ることができる他の回目に見えるようになるためには50/50のチャンスがあるということです解決され、読み込みはfalseに設定されますが、ng-ifはコンテンツを隠し続けます。コンテンツが表示されていても、ng-repeatがcontroller.responsesがまだ空であると言う可能性があります。

約束事が解決されたときに、ng-ifがcontroller.loadingを偽と受け取れるようにするにはどうすればよいですか?また、ng-repeatと同じ質問で、値がcontroller.responsesに表示されないことがあります。私はタイムアウトを考慮しましたが、それは半分から1秒から10秒の間でどこでもかけることができるので、理想的な解決策ではありません。

+0

すべての約束は成功していますか? Promise.all(...)に成功コールバックしかありません。 1つ以上の約束が失敗した場合、成功のコールバックに終わらないと思いますか? – mortb

+0

この例では、すべての約束事がうまく解決されたと仮定していますが、実際の完全実装では失敗のフォールバックがあります。 – Patrick

+0

$ digest.apply()または$ scope.apply()を試しましたか? UIがスコープについてのアップデートを取得しない可能性が変更されている可能性があります。 –

答えて

1

$qの代わりにPromise.allを使用しているという問題があります。 $qは、$digestサイクルを行うAngularチームによって構築されたPromiseライブラリです。

$q.all(promises).then(function success(response) { 
    for (responseIndex = 0; responseIndex < response.length; responseIndex++) { 
    responses.push(response[responseIndex].data); 
    } 
    controller.loading = false; 
}); 

Read more about $q

関連する問題