所以我在使用离子框架构建应用程序时尝试使用angular-js $ resource函数。但我似乎无法使其发挥作用。 相关代码:
Service.js
.factory('Pages', function($resource) {
var source = $resource("http://localhost:5432/api/pages",{},
{query: { method: "GET", isArray: false }});
return source;
})
controllers.js
.controller('PagesCtrl', function($scope, Pages) {
$scope.pages = Pages.query();
$scope.results = $scope.pages.results;
console.log($scope.results);
})
browse.html
<ion-view view-title="Browse">
<ion-content>
<h1>Browser</h1>
<ion-list>
<ion-item ng-repeat="page in results">
<h2>{{page.title}}</h2>
</ion-item>
</ion-list>
</ion-content>
</ion-view>
和数据
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"parent": null,
"title": "Blog",
"content": "<p>Blog</p>",
"content_model": "richtextpage",
"slug": "blog",
"publish_date": null,
"login_required": false,
"meta_description": "Blog",
"tags": ""
},
{
"id": 2,
"parent": null,
"title": "Lorem Ipsum",
"content": "Lorem ipsum ....",
"tags": ""
}
]
}
但控制台日志(在controllers.js中)将始终打印'undefined'。我已经好几个小时了,我似乎无法找到错误。
答案 0 :(得分:2)
$ scope.pages是一个承诺。要写入控制台,您需要使用这样的回调函数:
$scope.pages = Pages.query();
$scope.pages.$promise.then(function (result) {
console.log(results);
});
答案 1 :(得分:2)
.query()
的实际结果对象是一个保留结果的承诺。
因此,当您尝试访问有效负载的result属性时,可能是请求尚未完成。
但是,Angular ng-repeat
语句内置了对promises的支持,因此在您的视图中,如果您这样做,则使用browse.html:
<ion-item ng-repeat="page in pages.results">
而不是在控制器中处理$scope.results
,一切都应该看起来更好。
答案 2 :(得分:0)
以下是我对该服务的建议:
.factory('Pages', function($resource) {
return {
source: $resource("http://localhost:5432/api/pages",{},
{
query: {
method: "GET",
isArray: false
}
})
}
})
然后在ctrl:
.controller('PagesCtrl', function($scope, Pages) {
$scope.pages = Pages.source.query();
$scope.results = $scope.pages;
console.log($scope.results);
})
但是你知道查询只返回一个对象,因为你告诉$resource
你的查询没有返回一个数组(它是假的)。
只有在你的后端定义正确时才能使用。