所以我目前遇到了这个问题
我有选择从DB检索哪些值的选项。我使用ui-router,并且在控制器中我总是设置if(vm.action =='blabla')然后它将调用一个函数然后从webservice中检索数据。
问题是,当我调用超过2个数据(示例产品和税收选择选项)时。如何在从DB成功检索特定选择选项后运行函数?
举个例子,我正在为发票模块做报价。有税和产品。这两个从DB中检索。在我成功检索产品后的ajax调用中,我直接运行另一个函数来计算所有的价格和税。但不知何故,在所有产品成功加载后,税收尚未成功加载到vm.options.tax
我已经尝试过使用$ scope.watch('vm.options.tax',function())但它只是首先给我未定义,并且一旦加载了vm.options.tax就没有更新我来自DB的数据。
我怎么能等'vm.options.tax已加载然后运行该功能?
谢谢
答案 0 :(得分:0)
当您使用scope.watch时,一旦dom首次完全加载并且模型值发生变化,它将触发。当dom加载时,从db检索数据的过程还没有完成,这就是你得到未定义值的原因。你可以使用角度承诺。 Angular的语义规定你使用promises作为一种回调句柄' - 在服务中执行异步操作,返回承诺,并在异步工作完成后,触发承诺的函数。
var populateTax = function() {
return $http.get('/api/get_all_tax')
.then(
function (response) {
// Calculate pricing here
var pricing = response.data * tax;
},
function (httpError) {
// translate the error
throw httpError.status + " : " +
httpError.data;
});
};