angularJS服务模型避免重复

时间:2016-02-09 08:39:26

标签: javascript angularjs

一个简单的问题,如何避免在执行http帖子和放置相同表单时重复代码。

说:

// Post new form
function postForm(form){
    var data = {
        name: form.name
        lastName: form.lastName
    }

    return api.post('jobs', undefined, JSON.stringify(data), 'application/json');
}

// Put save/edit existing (data)
function putForm(form){
    var data = {
        name: form.name
        lastName: form.lastName
    }

    return api.put('jobs', undefined, JSON.stringify(data), 'application/json');
}

我的尝试,但后来我无法访问函数表单参数。

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数据。

3 个答案:

答案 0 :(得分:2)

也许使用规范化辅助函数?

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

当然,如果每个实现需要细微更改,可以向规范化程序添加一些配置。

答案 1 :(得分:0)

没有测试过,但这可能适合你

function postForm(form, method){

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

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

答案 2 :(得分:0)

你有两个功能实现,两者之间唯一不同的是使用的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);,因为这些方法可能依赖挂在this指针上的字段。