Javascript angularJS服务模型避免重复

Javascript angularJS服务模型避免重复,javascript,angularjs,Javascript,Angularjs,只是一个简单的问题,如何避免在执行相同形式的http post和put时重复代码 说: 我的尝试,但我无法访问函数形式参数 var data = { name: name lastName: lastName } // Post new form function postForm(form){ return api.post('jobs', undefined, JSON.stringify(data), 'application/json'); } // Put

只是一个简单的问题,如何避免在执行相同形式的http post和put时重复代码

说:

我的尝试,但我无法访问函数形式参数

var data = {
    name: name
    lastName: lastName
}

// Post new form
function postForm(form){
    return api.post('jobs', undefined, JSON.stringify(data), 'application/json');
}

// Put save edit form
function postForm(form){
    return api.put('jobs', undefined, JSON.stringify(data), 'application/json');
}

不确定我在这里是否有意义,但希望有人能理解我的意图。基本上,我不想在调用api post或put时复制var数据。

是否可以使用规范化帮助函数

// Post new form
function postForm(form){
    return $http.post('api', extractData(form));
}

// Put save/edit existing (data)
function putForm(form){
    return $http.put('api', extractData(form));
}


// private helper    
function extractData(data){
    return JSON.stringify({
        name: data.name,
        lastName: data.lastName
    });
}

当然,如果您需要对每个实现进行细微的更改,您可以向规范化器添加一些配置。

是否可以使用规范化助手函数

// Post new form
function postForm(form){
    return $http.post('api', extractData(form));
}

// Put save/edit existing (data)
function putForm(form){
    return $http.put('api', extractData(form));
}


// private helper    
function extractData(data){
    return JSON.stringify({
        name: data.name,
        lastName: data.lastName
    });
}

当然,如果您需要对每个实现进行细微的更改,您可以向规范化器添加一些配置。

尚未对其进行测试,但这可能适合您

function postForm(form, method){

    var data = {
        name: form.name
        lastName: form.lastName
    };

    return $http({
                  url: 'api', 
                  method: method,
                  data: data
                  });
}

还没有测试过,但这可能对你有用

function postForm(form, method){

    var data = {
        name: form.name
        lastName: form.lastName
    };

    return $http({
                  url: 'api', 
                  method: method,
                  data: data
                  });
}

您有两个函数实现,两者之间唯一不同的是使用的http函数

在javascript中,函数是第一类对象,因此可以将http函数作为参数传递

function send(form, httpMethod) {
   var data = {
     name: form.name
     lastName: form.lastName
   };
   return httpMethod.apply($http, [
     'jobs',
     undefined,
     JSON.stringify(data),
     'application/json'
   ]);
 }

 // Post new form
 function postForm(form) {
   send(form, $http.post);
 }

 // Put save edit form
 function putForm(form) {
   send(form, $http.put);
 }

有必要通过
apply
调用该方法,而不是简单地调用
httpMethod('api',data'),因为这些方法可能依赖于挂起
这个
指针的字段。

您有两个函数实现,两者之间唯一不同的是使用的http函数

在javascript中,函数是第一类对象,因此可以将http函数作为参数传递

function send(form, httpMethod) {
   var data = {
     name: form.name
     lastName: form.lastName
   };
   return httpMethod.apply($http, [
     'jobs',
     undefined,
     JSON.stringify(data),
     'application/json'
   ]);
 }

 // Post new form
 function postForm(form) {
   send(form, $http.post);
 }

 // Put save edit form
 function putForm(form) {
   send(form, $http.put);
 }

有必要通过
apply
调用该方法,而不是简单地调用
httpMethod('api',data'),因为这些方法可能依赖于挂起
指针的字段。

请参阅上面的更新,atm这就是我发送OBJ的方式。看起来效果不错,我将extractData包装在JSON.stringify中,因为它给了我400个错误。但是,使用这种方法还是使用JSON.parse(JSON.stringify(form))更好。Objs来自后端,不知道为什么要字符串化然后解析,但是如果需要JSON.parse结果,只需在helper函数中执行即可。参见更新的示例。参见上面我的更新,这就是我发送OBJ的方式。看起来效果不错,我将extractData包装在JSON.stringify中,因为它给了我400个错误。但是,使用这种方法还是使用JSON.parse(JSON.stringify(form))更好。Objs来自后端,不知道为什么要字符串化然后解析,但是如果需要JSON.parse结果,只需在helper函数中执行即可。请参阅更新的示例。