Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将$resource转换为$http?_Javascript_Angularjs_Ajax_Angularjs Service - Fatal编程技术网

Javascript 如何将$resource转换为$http?

Javascript 如何将$resource转换为$http?,javascript,angularjs,ajax,angularjs-service,Javascript,Angularjs,Ajax,Angularjs Service,如何将我对$resource的使用转换为利用原始$http服务?那么,$resource到底做了什么,$http没有 return $resource(API_LINK+'/api/users/', { id: '@_id' }, { changePassword: { method: 'PUT', params: { controller:'password' } }, get: { method: 'GET',

如何将我对
$resource
的使用转换为利用原始
$http
服务?那么,
$resource
到底做了什么,
$http
没有

return $resource(API_LINK+'/api/users/', {
   id: '@_id'
 },
 {
   changePassword: {
     method: 'PUT',
     params: {
       controller:'password'
     }
   },
   get: {
     method: 'GET',
     params: {
       id:'me'
     }
   })

$resource
只是对
$http
的一种抽象,其思想是API便于用于RESTful端点。没有任何
$resource
可以使用
$http
编写。利用
$http
在工厂中编写上述内容的方法可能包括

// assumption that API_LINK is an injectable constant
.factory('MyService', function(API_LINK, $http) {

    function changePassword(params) {
        return $http.put(API_LINK +'/api/users/', params);
    }

    function get(id) {
        return $http.get(API_LINK +'/api/users?id=' + id);
    }

    return {
        changePassword: changePassword,
        get: get
    }
});
使用以下用法

.controller('ctrl', function($scope, MyService) {

    MyService.get('me').then(function(response) {
        // ...
    });

    MyService.changePassword({ controller: 'password' }).then(function(response) {
        // ...
    });
});

如果您需要通过涉及的承诺解决方案完全控制工厂功能,我建议您查看。

我们也可以使用其他类似方法:

get: function() {
    var id = 'me';
    $http.get(API_LINK + '/api/users/' + id )
      .success(function(response) {
        defer.resolve(response);
      })
      .error(function(err) {
        console.log('err', err);
        defer.reject(err);
      });
    return defer.promise;
  },

  changePassword: function() {
    $http.put(API_LINK + '/api/users/', {controller:'password'} )
      .success(function(response) {
        defer.resolve(response);
      })
      .error(function(err) {
        console.log('err', err);
        defer.reject(err);
      });

    return defer.promise;
  }

有关$http和$resources之间的差异,请参阅此问题。get:function(){$http.get(API_LINK+'/API/users/',{id:'me',controller:'password'}).success(function(response){console.log('response',response);///defer.resolve(response);}.err(function(err){console.log('err',err err);//defer.reject(err);});//return defer.promise;}我这样做了,api工作正常,但给出了一个错误,错误是:TypeError:无法读取未定义的属性'hasOwnProperty'。您能详细说明一下您所做的吗?因为上面您在get方法中传递了两个参数..那么id:@\u id呢?我应该把它放在哪里