使用AngularJS获取JSON数据,并在返回的对象上添加方法
我需要使用Angular从服务器获取一些JSON数据。比如说用户数据。我创建了这样的服务: 在我的控制器中:使用AngularJS获取JSON数据,并在返回的对象上添加方法,json,angularjs,Json,Angularjs,我需要使用Angular从服务器获取一些JSON数据。比如说用户数据。我创建了这样的服务: 在我的控制器中: 这很好,但是如果我想给用户添加一些方法呢?例如,在视图中,我想执行{{user.isAdmin()}}。这是正确的方法吗?在哪里可以添加这些方法?如果希望服务始终使用此方法返回对象,请执行以下操作: app.service('User', function($http) { return $http({method: 'GET', url:'/current_user'}).
这很好,但是如果我想给用户添加一些方法呢?例如,在视图中,我想执行
{{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);
您将获得所需的所有方法(使用原型等)。您可以在创建的服务中通过以下几种方式实现这一点:
transformResponse:函数(数据、标题){
什么是
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;
}