我是Angular的新手,我正在尝试使用ngResource
。
我在chapter.service.js
文件中创建了一个工厂
angular.module('myApp')
.factory('Chapter', function ($resource) {
return $resource('/api/book/chapter/:id'); // Note the full endpoint address
});
matchescontroller.js
angular.module('myApp').controller('matchesCtrl', function($scope, $location, Chapter) {
// This is used to get URL parameters
$scope.url = $location.path();
$scope.paths = $scope.url.split('/');
$scope.id = $scope.paths[2];
$scope.action = $scope.paths[3];
//Trying to call the test data
var chapters = Chapter.query();
$scope.myFunction = function() {
alert(chapters.length);
}
我在哪里测试功能
<button ng-click="myFunction()">Click Here</button>
我创建了一个测试函数来测试我的查询是否返回了任何结果。当我点击按钮时,我被警告0,这意味着查询无效。
当我将功能更改为
时$scope.myFunction = function() {
console.log(Object.keys(chapters));
}
我得到[$promise, $resolve]
,但没有一个架构密钥
我一定做错了,但我正在看这个教程
http://www.masnun.com/2013/08/28/rest-access-in-angularjs-using-ngresource.html
任何帮助将不胜感激。
编辑:这是我从服务器获得的回复
GET http://localhost:9000/api/book/chapter/1 500 (Internal Server Error)
答案 0 :(得分:2)
$scope.myFunction = function() {
Chapter.query({}, function(data) {
$scope.chapters = data;
}, function(error) {
// custom error code
});
}
使用$ resource时,我更喜欢使用API附带的成功/错误处理程序,而不是直接处理promise。要实现的重要一点是,仅仅因为您调用查询并不意味着结果立即可用。因此,使用一个回调来处理成功/错误取决于你的后端返回什么。只有这样,你才能在UI中绑定和更新reuslt。
此外,虽然我们正在谈论它,但我注意到您没有在$ resouce网址中连接可选参数。 $ resource采用第二个参数,该对象为路径的/:id
部分提供映射。
return $resource('/api/book/chapter/:id', {id: '@id'});
这种表示法的含义是你将一个对象传递给具有id属性的$ resource,它将被载入你的URL。
所以这个:
$scope.item = {id: 42, someProp: "something"};
Chapter.get({$scope.item}....
将导致API调用看起来像'/api/book/chapter/42'
答案 1 :(得分:1)
你从$ resource获得了一个承诺而不是&#34;结果&#34;来自您的数据库。结果在承诺里面。所以试试这个
var chapters = Chapter.query();
$scope.myFunction = function() {
chapters.then(function(data) {
console.log(data);
});
}
我必须承认,我不熟悉ngResource,所以Jessie Carters是对的,正确的语法是:
chapters.get({...}, function callback() {...})