使用AngularJS获取JSON数据并在返回的对象上添加方法

时间:2013-10-10 14:23:02

标签: json angularjs

我需要从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()}}。这是正确的方法吗?我在哪里可以添加这些方法?

2 个答案:

答案 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)

您可以通过以下几种方式在您创建的服务中执行此操作:

  1. 开始使用$ resource并对响应使用转换:
    http://jsfiddle.net/roadprophet/prtAP/ ...

    transformResponse:function(data,headers){

                    data = {};
                    data.coolThing = 'BOOM-SHAKA-LAKA';
                    return data;
                }  
    
  2. ... 我推荐这种方法,因为它使用$ resource来缩小清洁度。

    1. 使用$ http设置transformResponse: http://jsfiddle.net/roadprophet/bPfcz/

    2. 使用您自己的承诺,在获取承诺解析后但使用映射数据解析。这可能是最常用的处理方式,因为它需要您管理多个承诺。