请求拦截器对象变异

时间:2018-01-15 11:25:05

标签: angularjs interceptor angular-http-interceptors

我有一个请求拦截器,它现在做两件事,将一个时刻对象转换为后端兼容字符串,并将truefalse转换为10

问题是,例如当转换布尔值时,控制器中的对象就是来自。

如何“复制”对象,因此请求中的对象与原始对象不同?

我已尝试_.assign()angular.copy()并将其与JSON进行转换。

拦截

app.factory('requestInterceptor', function () {
function walk(obj) {
    _.keys(obj).forEach(key => {
        if (moment.isMoment(obj[key])) {
            // Do conversion
        }

        if (obj[key] === false || obj[key] === true) {
            obj[key] = obj[key] ? 1 : 0;
        }

        if (_.isArray(obj[key]) || _.isObject(obj[key])) {
            walk(obj[key]);
        }
    });
}

return {
    request(request) {
        if (request.data) {
            // let data = JSON.stringify(request.data);
            // request.data = JSON.parse(data);
            walk(request.data);
        }

        return request;
    },
    requestError(request) {
        return request;
    }
};
});

1 个答案:

答案 0 :(得分:0)

我认为您应该复制控制器中的对象并在请求中使用该副本而不是原始对象。

$scope.data = angular.copy($scope.formData);
$http.post(url, $scope.data)
   .then(
       function(response){
           ....
       }, 
       function(response){
           ....
       }
    );
相关问题