Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AngularJS获取JSON数据,并在返回的对象上添加方法_Json_Angularjs - Fatal编程技术网

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

使用AngularJS获取JSON数据,并在返回的对象上添加方法,json,angularjs,Json,Angularjs,我需要使用Angular从服务器获取一些JSON数据。比如说用户数据。我创建了这样的服务: 在我的控制器中: 这很好,但是如果我想给用户添加一些方法呢?例如,在视图中,我想执行{{user.isAdmin()}}。这是正确的方法吗?在哪里可以添加这些方法?如果希望服务始终使用此方法返回对象,请执行以下操作: app.service('User', function($http) { return $http({method: 'GET', url:'/current_user'}).

我需要使用Angular从服务器获取一些JSON数据。比如说用户数据。我创建了这样的服务:

在我的控制器中:


这很好,但是如果我想给用户添加一些方法呢?例如,在视图中,我想执行
{{user.isAdmin()}}
。这是正确的方法吗?在哪里可以添加这些方法?

如果希望服务始终使用此方法返回对象,请执行以下操作:

app.service('User', function($http) {
  return $http({method: 'GET', url:'/current_user'}).
         then(function(response) {
           response.data.isAdmin = function() { return true; };
           return response.data;
         });
});
现在,任何引用此承诺并使用.then()的未来代码都将检索新对象。有关更多信息,请参阅promise文档

.$q

请记住,在httpPromise上使用“then”将转换为正常承诺。您不再有方便的方法“成功”和“错误”

更好的做法是使用构造函数为返回的对象创建一个类,该构造函数接受数据对象并分配适当的属性(或扩展实例)。这样,您可以简单地执行以下操作

return new User(val);

您将获得所需的所有方法(使用原型等)。

您可以在创建的服务中通过以下几种方式实现这一点:

  • 开始使用$resource并对响应使用转换:

    transformResponse:函数(数据、标题){

  • 。。。 我建议使用这种方法,因为它使用$resource,因此可以更清晰地扩展

  • 使用$http设置transformResponse:

  • 使用您自己的承诺,该承诺在get承诺解析后解析,但使用映射的数据。这可能是最手动的处理方法,因为它需要您管理多个承诺


  • 什么是
    isAdmin()
    一个对我从JSON中获得的参数进行操作的方法。这仅仅是一个例子,它可能是
    getFullName()
    或诸如此类。那么是的,这应该可以正常工作。这不起作用吗?这是一种代码风格的东西,但我会将用户服务重命名为UserService或FetchUser或GetUser,以指示它在做什么。从User这个词看,它不是一个明显的服务。从Angular docs()看起来你没有给服务名称加任何后缀。但是你的建议当然有意义。你认为有类似Angular的代码风格指南吗?我忘记了。然后在http promise上给你响应对象,而不是数据。成功了。感谢Gpx纠正我。
    app.service('User', function($http) {
      return $http({method: 'GET', url:'/current_user'}).
             then(function(response) {
               response.data.isAdmin = function() { return true; };
               return response.data;
             });
    });
    
    return new User(val);
    
                    data = {};
                    data.coolThing = 'BOOM-SHAKA-LAKA';
                    return data;
                }