AngularJS:在使用DB中的数据加载作用域后运行函数

AngularJS:在使用DB中的数据加载作用域后运行函数,angularjs,Angularjs,所以我现在遇到了这个问题 我选择了从DB中检索值的选项。我使用ui路由器,在控制器中我总是设置if(vm.action=='blablabla'),然后它将调用一个函数,然后从Web服务检索数据 问题是,当我调用2个以上的数据(示例产品和税务选择选项)时。在从数据库成功检索特定的select选项后,如何运行函数 例如,我正在对发票模块进行报价。有税收和产品。这2个是从数据库中检索到的。在成功检索产品后的ajax调用中,我直接运行另一个函数来计算所有价格和税费。但不知何故,在成功加载所有产品后,该

所以我现在遇到了这个问题

我选择了从DB中检索值的选项。我使用ui路由器,在控制器中我总是设置if(vm.action=='blablabla'),然后它将调用一个函数,然后从Web服务检索数据

问题是,当我调用2个以上的数据(示例产品和税务选择选项)时。在从数据库成功检索特定的select选项后,如何运行函数

例如,我正在对发票模块进行报价。有税收和产品。这2个是从数据库中检索到的。在成功检索产品后的ajax调用中,我直接运行另一个函数来计算所有价格和税费。但不知何故,在成功加载所有产品后,该税尚未成功加载到vm.options.tax

我曾尝试使用$scope.watch('vm.options.tax',function()),但它首先给出了未定义的结果,并且在vm.options.tax加载了数据库中的数据后没有更新我

如何“等待”vm.options.tax已加载,然后运行该函数


谢谢

当您使用scope.watch时,它将在dom首次完全加载和模型值更改时触发。加载dom时,从db检索数据的过程没有完成,这就是为什么会得到未定义的值。你可以使用角度承诺。Angular的语义规定使用承诺作为一种“回调句柄”——在服务中执行异步操作,返回承诺,当异步工作完成时,触发承诺的then函数

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

你有密码吗?听起来像是可以通过链接承诺来解决的问题。请参阅。