您是Angular的新手我在工厂中使用$ resource时很难看到如何处理数据。我正试图从$ http请求转移到我工厂的$ resources。
首先我有(简化代码):
.factory('MetadataService', function($http) {
$http({
method: 'OPTIONS',
url: 'http://myurl'
}).success(function(data) {
customized_data = do_some_complex_handling_on_data(data)
callback(customized_data);
});
});
当我尝试在我的工厂中使用$资源时,似乎我必须在我的控制器中调用do_some_complex_handling_on_data()方法:
.factory('MetadataService', function($resource) {
return($resource('http://myurl', {}, {
metadata: {method: 'OPTIONS'}
}));
});
# controller:
var metadata = do_some_complex_handling_on_data(MetadataService.metadata());
由于我要在我的应用程序的不同部分使用很多控制器中的工厂(这就是我首先建造工厂的原因),我希望我的工厂可以根据需要返回数据。 工厂返回后,无需自定义数据。
问题:我如何让工厂调用do_some_complex_handling_on_data()函数而不是控制器?
答案 0 :(得分:1)
您可以使用$http
服务提供的响应转换器。变换器用于转换$http
在传递给最终客户端之前的响应。
默认情况下,有一个转换器寄存器将json字符串转换为json对象。您可以将自己的变换器附加到此集合,并使用响应json对象调用它。在变换器功能中,您可以调用任何可以转换数据的函数。
metadata: {
method: 'OPTIONS'
transformResponse: appendTransform($http.defaults.transformResponse,
function(value) {
return do_some_complex_handling_on_data(value);
})
}
function appendTransform(defaults, transform) {
// We can't guarantee that the default transformation is an array
defaults = angular.isArray(defaults) ? defaults : [defaults];
// Append the new transformation to the defaults
return defaults.concat(transform);
}
我已从docs here
中获取此代码另请阅读$http
服务