我想创建一个小型移动发票应用程序来查看发票,更新发票和管理客户数据。
因此我想创建一个服务,首先通过API加载所有发票,然后让所有其他服务方法都可以访问它。
例如:myService.getInvoices()
应该使用$ http请求加载所有发票并返回它们。 myService.getInvoices(id)
应该返回一张发票。如果首先调用getInvoices(id),它应首先加载所有发票($ http),然后返回特定的发票。
现在是棘手的部分。我想编辑应用程序内的发票。保存发票数据时应该只是服务中的更新,然后$ http post请求应该将数据发送到api。这样,发票清单应始终保持更新,而无需从api完全重新加载发票。与插入新发票的方式相同。
总结:应用程序应该能够在加载所有发票一次后脱机工作。只有第一次加载,更新和插入才能执行任何请求。
实现这一目标的最佳方式是什么?
答案 0 :(得分:0)
看起来您假设除了移动应用以外的任何地方都不会发生变化。一个需要加载数据的应用程序,这可能是不准确的。
但是,要回答您的问题,您始终可以更新服务内部的模型,发送更新请求并返回。所有HTTP请求都是异步的。用户不必等待它们。
如果你想要一些非常先进的东西,有了正确的离线模型缓存,你可以试试像breezeJS(more about offline features)这样的东西可以和AngularJS(more about Angular support)一起使用。
答案 1 :(得分:0)
您可以创建一个工厂/服务,从请求中检索数据,然后在需要的地方重新使用存储的数据:
module.factory('myService', function ($http) {
var invoiceValues;
// this will make a http request and store the result
var requestInvoiceValues = function() {
$http.get("/api/getInvoices").then(
function(results){
invoiceValues = results;
});
};
// call the stored result, returning all invoices(without making a http request)
var getInvoices = function() {
return invoiceValues;
};
// call stored result, returning filtered values
var getInvoiceById = function(id) {
var filteredValues;
// TODO: filter values logic using 'invoiceValues'
return filteredValues;
};
return{
requestInvoiceValues : requestInvoiceValues,
getInvoices : getInvoices,
getInvoiceById : getInvoiceById
}
});
现在,只要您需要检索这些内容,就可以致电getInvoiceValues
。只要您需要从服务器更新发票值,您只需拨打requestInvoiceValues
即可。请注意,在致电requestInvoiceValues
填充发票之前,您需要在某个阶段致电getInvoiceValues
。
myApp.controller('MyController', function ($scope, myService) {
var init = function (){
myService.requestInvoiceValues(); // this will make the http request to the server
};
var justGetValues = function(){
$scope.items = myService.getInvoices(); // this will get the result (without making a http request)
};
});