javascript – Angularjs – 自定义$资源

前端之家收集整理的这篇文章主要介绍了javascript – Angularjs – 自定义$资源前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Angular $资源进行REST服务.由于我的get响应的奇怪,我不能使用$资源服务的CRUD应用程序.

创建一个新的对象的工作(对于卡),相似:

var newCard = new CreditCard();
newCard.name = "Mike Smith";
newCard.$save();

获取作品:

var card = CreditCard().get({_id:1)

但是,GET响应不是对象卡本身,而是带有其他消息(包装对象)

{ message: ".....",response: Card //object
}

所以当我保存通过资源检索的实例时,它会发送包装对象(与响应字段中修改的Card对象).
这可能是正确的,但我的服务器期望卡对象不是包装.
有没有办法定制$资源,以便它发送所需的对象.从doc,看起来只能url参数可以改变.

$resource(url[,paramDefaults][,actions]);

解决方法

我还在$资源模块中的标准实现中遇到问题.有一段时间,我刚刚在我自己的$资源文件的本地拷贝中进行编辑,但是我发现我仍然不满意他们实现REST资源的方式.我需要比提供的更多的灵活性.

标准的$resource模块只是围绕$http的工厂包装.如果您在$资源模块中清除代码,则可以很容易地创建自己的自定义实现.

var app = angular.module('app',[]);

app.factory('CreditCard',['$http',function($http) {

    function CreditCardFactory() {

        function parseMessage(message) {
            if (message.response) {
                return message.response;
            }
        }

        function CreditCard(value) {
            angular.copy(value || {},this);
        }

        CreditCard.$get = function(id) {
            var value = this instanceof CreditCard ? this : new CreditCard();
            $http({
                method: 'GET',url: '/creditcards/' + id
            }).then(function(response) {
                var data = response.data;
                if (data) {
                    angular.copy(parseMessage(data),value);
                }
            });
            return value;
        };

        CreditCard.prototype.$get = function(id) {
            CreditCard.$get.call(this,id);
        };

        return CreditCard;

    }

    return CreditCardFactory;

}]);

然后,在您的控制器功能中,注入CreditCard工厂,就像$资源一样.

app.controller('CreditCardCtrl',function($scope,CreditCard) {
    $scope.creditCard = CreditCard().get(3);
});

这样您可以解析您所需的REST操作的响应,并允许您实现所需的任何操作.例如:我希望在我的资源上使用一个保存方法,以便在选择使用POST之前检查该对象是否具有一个id属性(如果没有id可用,则创建一个新的资源)或一个PUT(当一个PUT有效的ID可用).

这也将允许您实现一种不同的处理方式07.1. angular.js方式内置于$http中,但是我公司的REST API通过将JSON数组包含在一个虚拟对象中来解决这个问题.我使用像上面那样的自定义资源来解析虚拟对象.

猜你在找的JavaScript相关文章