Ang*_*hef 18 javascript angularjs
我正在使用以这种格式返回JSON数据的API:
{
paging: {
previous: null,
next: null
},
data: [
{ title: 'First Item' },
{ title: 'Second Item' },
...
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Angular的$ resource服务来获取这些数据.
我的代码 - 位于控制器中 - 是这样的:
var Entity = $resource('/api/entities');
var entities = $scope.entities = Entity.get();
Run Code Online (Sandbox Code Playgroud)
然后,在视图中,我可以显示如下数据:
<ul>
<li ng-repeat="entity in entities.data">{{entity.title}}</<li>
</ul>
Run Code Online (Sandbox Code Playgroud)
一切正常,但是:
entities.data视图的内容,而不是整个entities对象.如何在填充之前拦截GET请求返回的数据以对其进行修改$scope.entities?Entity.query()代替它会更干净Entity.get().但是,如果我Entity.query()在上面的代码中使用,我会收到错误"TypeError:Object#没有方法'push'".这是有道理的,因为API返回一个对象而不是一个数组(因此,对象上没有'push'方法).同样,如果我可以.data从响应中提取属性,我会有一个数组.根据Dan Boyon的这些指示,我设法自定义默认$resource服务并覆盖.get()或.query()方法,但我不知道从那里去哪里.
Chr*_*ris 24
我认为您不需要修改get或query默认值.只需使用成功回调即可完成您想要的操作.它应该更加健壮.
Entity.get(
{}, //params
function (data) { //success
$scope.entities = data.data;
},
function (data) { //failure
//error handling goes here
});
Run Code Online (Sandbox Code Playgroud)
Html也会更干净:
<ul>
<li ng-repeat="entity in entities">{{entity.title}}</<li>
</ul>
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我通常会为我的资源声明服务,然后在需要时将它们注入我的控制器.
myServices.factory('Entity', ['$resource', function ($resource) {
return $resource('/api/entities', {}, {
});
}]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16302 次 |
| 最近记录: |