【发布时间】:2016-05-22 19:02:32
【问题描述】:
使用 REST 获取费率的工厂
.factory('rateResource', ['$resource', function ($resource) {
return $resource('/rates/:currency/:effectiveDate', {
currency: '@currency',
effectiveDate: '@effectiveDate'
});
}])
调用工厂以获取资源并检索费率以及错误(如果有)的服务。
.service('RateService', ['rateResource', '$rootScope',
function (rateResource, $rootScope) {
var self = this;
self.rates = [];
self.search = function (baseCurrency, effectiveDate) {
self.rates = [];
var error = null;
self.baseCurrency = baseCurrency;
self.effectiveDate = effectiveDate;
if (baseCurrency) {
rateResource.query({currency: baseCurrency, effectiveDate: effectiveDate})
.$promise.then(function (rates) {
if (rates) {
angular.forEach(rates, function (rate) {
rate.maintTs = $rootScope.formatTimestampToHHMMSS(rate.maintTs);
rate.editable = false;
self.rates.push(rate);
});
self.processing = false;
}
}, function (response) {
self.processing = false;
error = 'Processing failed due to '+response.status;
console.log(error);
})
return {
rates: self.rates,
errors: error
}
}
}
}]);
控制器调用服务以获取费率。
.controller('RateController', ['RateService',
function (rateService) {
var self = this;
self.baseCurrency = rateService.getBaseCurrency();
self.effectiveDate = rateService.getEffectiveDate();
self.rates = rateService.getRates();
//make the call from the controller
self.search = function () {
var response = rateService.search(self.baseCurrency, self.effectiveDate.yyyyMMdd());
self.rateRecords = response.rates;
self.errors = response.errors;
}
}])
兑现承诺后,控制器中的费率显示正常。但是,在收到错误后,它们不会从服务转移到控制器。 (我更改了 REST URL 以使服务返回 404 响应)。我做错了什么?
【问题讨论】:
-
你无法在 Promise 函数之外获得
self.rates值。因为它们是异步填充的。 -
self.rates 对我来说工作正常;兑现承诺后,我可以通过控制器在显示屏上看到费率。问题在于错误
-
哦..
self.rates工作正常,因为您传递了self.rates参考.. 您在说什么错误..? -
我想传递 error = 'Processing failed due to '+response.status;消息给控制器。我通过向无效的 url 发出请求来模拟 404,但是错误没有发送到控制器。
-
看看我添加的答案。
标签: javascript angularjs angularjs-service angularjs-resource