2015-06-02 3 views
0

В моем приложении мне нужно сделать POST запросов с этой информацией:Построения полезной нагрузки в AngularJs POST вызывает

  "data": [ 
      { 
       "type": "Search", 
       "thing": "{"Table":"Movie","Field":"Title","Type":"String","Value": "INPUT VALUE GOES HERE"}" 
      }, 
      { 
       "type": "Search", 
       "thing": "{"Table":"Movie","Field":"Director","Type":"String","Value": "INPUT VALUE GOES HERE"}" 
      }, 
      { 
       "type": "Search", 
       "thing": "{"Table":"Movie","Field":"Year","Type":"String","Value": "INPUT VALUE GOES HERE"}" 
      } 
      ] 

У меня есть директивы, которые являются просто входными элементами, которые будут получать данные, которые должны быть помещены в «INPUT ЗНАЧЕНИЕ ЗДЕСЬ ".

Мой вопрос, могу ли я заранее ПЭНД все этой информации в ng-model моих директивах, так что, когда я представляю свой POST запрос, я могу сделать что-то вроде этого:

function submitRequest(input){  
    var dataToSend = [ input.movieTitle, input.movieDirector, input.movieYear];    
    return $http({ 
     method: 'POST', 
     data: dataToSend  
     }) 
    } 

входа является $scope переменная, которая содержит данные формы, собранные всеми тремя различными директивами

Я просто не уверен, как строить строчные строчки запросов, подобные этим.

+0

Основываясь на OP и комментариях к нижеприведенному ответу, я думаю, что дополнительный код будет полезен при достижении четкого решения. Подумайте о поставке директив, которые вы используете. Возможно, настроил плункер. – tpie

ответ

0

Так что я в конечном итоге делает то, что rkho предложил и сделал это:

var query = { 
    requestId: "xxxx", 
    method: "search", 
    include: "title, director, year" 
} 
function submitRequest(data) { 
    query.data = []; 
    for(var i = 0; i < data.length; i++) { 
    var queryData = { 
     data: { 
     table: data[i].table || "default", 
     field: data[i].field || "default", 
     type: data[i].type || "default", 
     value: data[i].value 
     } 
    } 
    queryData["data"] = angular.toJson(queryData["data"]); 
    query.data.push(queryData); 
    } 
    return $http({ 
    method: 'POST', 
    url: 'URL GOES HERE', 
    data: query 
    }) 
} 

Таким образом, это немного более динамичным.

0

Вы можете установить dataToSend, чтобы быть этим массивом данных и просто иметь значения, соответствующие входным значениям. Смотрите ниже код:

function submitRequest(input){ 
    var dataToSend = [ 
     { 
     "type": "Search", 
     "thing": "{"Table":"Movie","Field":"Title","Type":"String","Value": input.movieTitle}" 
     }, 
     { 
     "type": "Search", 
     "thing": "{"Table":"Movie","Field":"Director","Type":"String","Value": input.movieDirector}" 
     }, 
     { 
     "type": "Search", 
     "thing": "{"Table":"Movie","Field":"Year","Type":"String","Value": input.movieYear}" 
     } 
    ]; 
    return $http({ 
     method: 'POST', 
     data: dataToSend 
     }) 
    } 
+0

Мне это известно, но у меня есть раскрывающийся список параметров, которые пользователь может выбрать и выполнить поиск. Например, может быть опция «рейтинги», в которой пользователь может ввести количество звезд, оцененных в среднем. В моих данныхTSend, я должен будет добавить еще один объект, который включает информацию о поиске. В конечном счете поиск будет динамичным, это не всегда будет три критерия поиска. – looseScrews

+0

Считаете ли вы, что для этого используется Угловая фабрика? –

+0

Да, этот звонок находится внутри фабрики. Я не знаю, как построить массив dataToSend динамически в зависимости от того, какие критерии поиска пользователь выбирает. В зависимости от того, какой пользователь выбирает из раскрывающегося списка, таблица, поле, тип и значение будут разными. Поэтому мне было интересно, могу ли я заполнить эти поля внутри самой директивы, чтобы при использовании ng-модели у нее уже было заполнено все, и я могу просто перебросить все это в массив. – looseScrews

Смежные вопросы