我有一个非常大的搜索表单,其中包含必须从Web服务填充的8个选择控件。我正在努力解决如何使用AngularJs最好地实现这一目标。我是否打电话给一个,然后将下一个放在'then'子句中,然后在'then'子句中加上ext,依此类推?只是看着这个让我觉得必须有一个更好的,格式正确的方法来做到这一点,我只是因为我是Angular的新手...
为了说明这个问题,我有以下HTML(整个表单的一部分):
<div class="row">
<div class="col-md-12">
<div class="col-md-2">
<label for="ddlRace">Race</label>
<select id="ddlRace" class="form-control"></select>
</div>
<div class="col-md-2">
<label for="ddlHairColor">Hair Color</label>
<select id="ddlHairColor" class="form-control">
</select>
</div>
<div class="col-md-2">
<label for="ddlEyeColor">Eye Color</label>
<select id="ddlEyeColor" class="form-control">
</select>
</div>
<div class="col-md-2">
<input type="text" id="tbHeight" class="form-control">
</div>
<div class="col-md-2">
<input type="text" id="tbWeight" class="form-control">
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<label for="tbStreetNumber">House Number</label>
<input type="text" id="tbStreetNumber" class="form-control">
</div>
<div class="col-md-2">
<label for="ddlStreetPrefix">Prefix</label>
<select id="ddlStreetPrefix" class="form-control">
<option value="">Prefix</option>
</select>
</div>
<div class="col-md-5">
<label for="tbStreetName">Street Name</label>
<input type="text" id="tbStreetName" class="form-control">
</div>
<div class="col-md-2">
<label for="ddlStreetSuffix">Suffix</label>
<select id="ddlStreetSuffix" class="form-control">
<option value="">Suffix</option>
</select>
</div>
</div>
我必须在服务电话中填充种族,头发颜色,眼睛颜色,街道前缀和街道后缀。我有一个工厂设置调用每个,但我需要在表单最初加载时运行所有这些,所以我可以填充字段。那么使用deferred / promise API执行此操作的最佳方法是什么?
答案 0 :(得分:1)
一个接一个地调用每个承诺,而不是将它们与'then'子句链接在一起。否则,如果你这样做,他们将连续运行 - 这不是你想要的。
当所有承诺都得到解决或出现问题时,使用$ q.all注册成功/错误回调:
var p1 = promise1();
var p2 = promise2();
var p3 = promise3();
$q.all([p1, p2, p3])
.then(
function() { /*success*/ },
function() { /*error */ }
);