如何将$resource转换为$http

how to convert $resource to $http?

本文关键字:http 转换 resource      更新时间:2023-09-26

如何将我对$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) {
        // ...
    });
});

如果您需要通过相关的承诺解析来完全控制工厂功能,我建议您查看AngularJS$q API。

我们还可以使用另一种方法:

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;
  }