如何将 $resource 转换为 $http?
how to convert $resource to $http?
如何将我对 $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) {
// ...
});
});
如果您需要完全控制涉及 promise 解析的工厂功能,我建议您查看 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;
}
如何将我对 $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) {
// ...
});
});
如果您需要完全控制涉及 promise 解析的工厂功能,我建议您查看 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;
}