只是尝试使用angularjs $resource
服务获得一个非常简单的REST get调用。永远不会调用API。这是代码:
angular.module('app.services', [])
.service('tourRepository', function ($resource) {
this.get = function (id) {
alert('tourRepositoryCalled for id ' + id + '!'); // this is called
var tour = $resource('/api/tour/:tourid', { tourId: '@id' });
return tour.get({ tourId: id }, function () {
alert('tour api called.'); // THIS NEVER IS
});
}
如果我使用浏览器并转到/ api / tour / 3,它可以正常工作。我在这做错了什么?我认为$资源调用可能更容易,例如下面,但我遵循angularjs文档。
理想情况下:
$scope.tour = $resource.get('/api/tour/' + id); // why wouldn't this work?
我想要做的就是调用一个简单的REST服务并将结果分配给我的$ scope.tour对象。因为我在服务中(我的'存储库')我无法访问$ scope。最好的方法是什么?当我将代码更改为以下时,API就会受到影响。
var tour = $resource('/api/tour/:tourid');
var theTour = tour.get({ tourid: id });
alert(theTour.id);
答案 0 :(得分:1)
对于简单模型,您可以使用$ http而不是$ resource
$http.get('/api/tour/' + id).success(function (tour) {
$scope.tour = tour;
});
$ resource是一种用于创建javascript类的服务(ActiveRecord样式)。
var Tour = $resource(...) // capital T
var tour1 = Tour.get()
虽然有点混乱,但您的代码应该有效。 ajax请求发生了吗?它会返回有效的回复吗?
答案 1 :(得分:0)
完成get请求后,返回的对象将填充从响应中获取的数据,$resource
的{{1}}方法中没有回调。
get
非常有用。在这种情况下,当解析对象并调用摘要循环时,视图将自动更新。
如果您需要回电,可以使用:
$resource
通过使用您的服务,您可以:
$http.get('/api/tour/' + id)
.then(function (tour) {
$scope.tour = tour;
});
答案 2 :(得分:0)
您必须在app('app.services')依赖项中包含ngResource
模块。网址中tourid
的拼写必须为tourId
angular.module('app.services', ['ngResource'])
.service('tourRepository', function ($resource) {
this.get = function (id) {
alert('tourRepositoryCalled for id ' + id + '!');
var tour = $resource('/api/tour/:tourId', { tourId: '@id' });
return tour.get({ tourId: id }, function () {
alert('tour api called.');
});
}