AngularJS:在范围加载来自DB的数据后运行函数

时间:2016-12-25 17:08:17

标签: angularjs

所以我目前遇到了这个问题

我有选择从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已加载然后运行该功能?

谢谢

1 个答案:

答案 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;
              });
};