Angular $资源不会调用get

时间:2014-02-01 15:22:54

标签: angularjs angularjs-resource

只是尝试使用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);

3 个答案:

答案 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.'); 
        });
    }