AngularJS:资源工厂和回调函数
AngularJS: Resource factory and callback function
您好,我是 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);
});
});
当我尝试在我的工厂中使用 $resource 时,似乎我必须在我的控制器中调用 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());
因为我要在我的应用程序的不同部分的很多控制器中使用工厂(这就是我首先创建工厂的原因),我想让我的工厂 return我需要的数据。并且不必在 工厂 return 之后自定义数据 。
问题: 如何让我的工厂调用 do_some_complex_handling_on_data() 函数而不是控制器?
您可以使用 $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
服务中有关 "Default Transformations" 的文档
您好,我是 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);
});
});
当我尝试在我的工厂中使用 $resource 时,似乎我必须在我的控制器中调用 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());
因为我要在我的应用程序的不同部分的很多控制器中使用工厂(这就是我首先创建工厂的原因),我想让我的工厂 return我需要的数据。并且不必在 工厂 return 之后自定义数据 。
问题: 如何让我的工厂调用 do_some_complex_handling_on_data() 函数而不是控制器?
您可以使用 $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
服务中有关 "Default Transformations" 的文档