Angulars $resource 具有强大的功能,可以返回注入(inject)值的对象并自动更新 View 。在 $resource 服务中是 Resource将解析结果复制到自身的对象 shallowClearAndCopy() .
我想链接从 $resource 返回的 promise ,并获得类似 Resource 对象的东西,该对象获取注入(inject)的延迟结果。 (编辑代码示例以返回对象并需要参数。)
var otherProperty = 'somethingChanging';
var lazyUser = $resource('/user/:userId').get({id:id});
var userDisplayNamePromise = lazyUser.$promise.then(transformResult);
function transformResult(user){
return { displayName: user.firstname + ' ' + user.lastname,
other: user[otherProperty]
};
}
目前我必须做类似的事情
userDisplayNamePromise.then(updateDisplayUser);
function updateDisplayUser(displayName){$scope.user = displayName;}
我很想做类似的事情
$scope.user = something(userDisplayNamePromise);
我找不到任何可以帮助我以如此简单的方式使用 promise 的东西。有人有好的建议吗?
我在 github.com/burka/resolvling 上放置了一个基本的工作示例。但我无法想象以前没有人这样做过?
最佳答案
有一些标准方法可以转换 Angular 资源的响应。
这是一个fiddle
这里是documentation
transformResponse – {function(data, headersGetter)|Array.} – 转换函数或此类函数的数组。转换函数获取 http 响应正文和 header 并返回其转换后(通常是反序列化)版本。默认情况下,transformResponse 将包含一个函数,该函数检查响应是否看起来像 JSON 字符串并使用 angular.fromJson 对其进行反序列化。为了防止这种行为,请将transformResponse设置为空数组:transformResponse: []
这里是示例代码
angular.module('services', ['ngResource']).
factory("someService", function ($resource) {
return $resource(
'/', {}, {
get: {
method: 'GET',
transformResponse: function(data, headers){
//MESS WITH THE DATA
data = {};
data.coolThing = 'BOOM-SHAKA-LAKA';
return data;
}
}
}
);
});
关于用于 self 解析对象的 Javascript 帮助器,可与 Angulars $resource 等 Promise 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844848/