我需要从Angular的服务器获取一些JSON数据。让我们说用户数据。我创建了这样的服务:
app.service('User', function($http) {
retrun $http({method: 'GET', url:'/current_user'});
});
在我的控制器中:
app.controller('SomeCtrl', function($scope, User) {
User.success(function(data) {
$scope.user = data;
});
});
这很好但是如果我想向用户添加一些方法怎么办?例如,在视图中我想做{{user.isAdmin()}}
。这是正确的方法吗?我在哪里可以添加这些方法?
答案 0 :(得分:3)
如果您希望服务始终使用此方法返回对象,请执行以下操作:
app.service('User', function($http) {
return $http({method: 'GET', url:'/current_user'}).
then(function(response) {
response.data.isAdmin = function() { return true; };
return response.data;
});
});
现在任何引用此promise并使用.then()的未来代码都将检索新对象。请查看promise文档以获取更多信息。
http://docs.angularjs.org/api/ng。$ Q
请记住使用'然后'在httpPromise上,它将转换为正常的承诺。你不再拥有方便的方法'成功'和'错误'。
最好使用构造函数为要返回的对象创建一个类,该函数接受数据对象并分配适当的属性(或扩展实例)。这样你就可以简单地做一些像
这样的事情return new User(val);
您将获得所需的所有方法(使用原型等)。
答案 1 :(得分:0)
您可以通过以下几种方式在您创建的服务中执行此操作:
开始使用$ resource并对响应使用转换:
http://jsfiddle.net/roadprophet/prtAP/
...
transformResponse:function(data,headers){
data = {};
data.coolThing = 'BOOM-SHAKA-LAKA';
return data;
}
... 我推荐这种方法,因为它使用$ resource来缩小清洁度。
使用$ http设置transformResponse: http://jsfiddle.net/roadprophet/bPfcz/
使用您自己的承诺,在获取承诺解析后但使用映射数据解析。这可能是最常用的处理方式,因为它需要您管理多个承诺。