使用$ resource替代Angularjs中的http不起作用

时间:2015-11-27 10:24:09

标签: angularjs angularjs-scope angularjs-resource

我正在学习Angularjs,在我的第一个应用程序中,我用$resource取代$ http并收到错误。以下是我之前的服务和当前的服务:

angular.module('myApp')
  .service('fetchData', function ($http, $rootScope, myService) {
// AngularJS will instantiate a singleton by calling "new" on this function
  this.fetchNames=function() {
      return $http.get(myService.getDomainUrl() + '/names.json');
  }

});

以下是我的$resource

新代码
angular.module('myApp')
  .service('fetchData', function ($resource, $rootScope, myService) {
// AngularJS will instantiate a singleton by calling "new" on this function
return $resource(myService.getDomainUrl() + '/names.json', {
          query:{
              method: 'GET',
              cache: true
          }
      });
});

我收到以下错误:     fetchData.fetchNames(...)。success不是函数

当我尝试在调用此函数时处理成功回调。请告诉我哪里出错了,以及在Angularjs中处理$resource的正确方法是什么。

2 个答案:

答案 0 :(得分:1)

查看文档:{​​{3}} 正确的方法是

var t = $resource(...);
t.query(successCallback, errorCallback)

另请注意:

  

$ http遗留承诺方法成功与错误   弃用。请改用标准方法。如果   $ httpProvider.useLegacyPromiseExtensions设置为false然后这些   方法将抛出$ http / legacy错误。

答案 1 :(得分:0)

$ resource是一个包装器。

将其声明为

public static void main(String[] args) {
    int list1 [] = {1,2,55,8,7,9,60,4};
    int list2 [] = {3,12,1,71,4,6,1,10};

    for(int x : list1){
        if(Arrays.asList(list2).contains(x)){
            System.out.println( x + " : present in second array.");
        }
    }

 }

您可以使用的操作(调用方法):

var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
  user.abc = true;
  user.$save();
});

我假设(没有代码如何使用)你没有调用正确的方法。 实施例

{ 'get':    {method:'GET'},
  'save':   {method:'POST'},
  'query':  {method:'GET', isArray:true},
  'remove': {method:'DELETE'},
  'delete': {method:'DELETE'} };

并像

一样使用它
var resource = $resource(....);