2015-11-30 2 views
1

Я хочу поместить значения динамических флажков (не логические истинные и ложные) в виде массива с использованием «ng-model» аналогично тому, как это делается с использованием атрибута name. Этот массив теперь помещается в объект JSON.Как связать динамическое значение флажка с помощью ng-модели?

<td> 
    <span ng-repeat="operation in operations_publish"> 
      <input type="checkbox" name="operations" ng-model="operations" value="{{operation}}"/> 
      {{operation}} 
    </span> 
</td> 

Ниже моя функция, чтобы отправить объект JSON:

$scope.send = function() { 
    console.log("test"); 
    var dataObj = { 
     "operationType" : $scope.operationType, 
     "conceptModelID" : $scope.conceptID, 
     "requestor" : $scope.requestor, 
     "status" : "new", 
     "requestDateTime" : null, 
     "lastExecutedDateTime" : null, 
     "completedDateTime" : null, 
     "instructions" : $scope.operations 

    }; 
    console.log(dataObj); 
    console.log(dataObj.instructions); 
    var response = $http.post('PostService', dataObj); 
    response.success(function(data, status, headers, config) { 
     $scope.responseData = data; 
    }); 
    response.error(function(data, status, headers, config) { 
     alert("Exception details: " + JSON.stringify({ 
      data : data 
     })); 
    }); 

Но 'dataObj.instructions' не определена, когда я запускаю код. Пожалуйста, предложите, правильно ли это сделать и что мне здесь не хватает.

+0

У вас есть 'ng-model =" операции "' однако 'operation' как ваш итератор в ng-repeat. –

ответ

2

Вы должны привязать каждый вход к другому значению. В настоящее время все они связаны с полем operations в диапазоне ng-model="operations".

Я предлагаю вам создать массив operations в контроллере, как это:

$scope.operations = new Array($scope.operations_publish.length); 

Затем вы можете связать галочки в соответствующий индекс в этом массиве:

<span ng-repeat="operation in operations_publish"> 
    <input type="checkbox" 
      name="operations" 
      ng-model="operations[$index]" 
      value="{{operation}}"/> 
    {{operation}} 
</span> 

Это даст вам массив с true на всех проверенных индексах. Если вы хотите, то выбранные значения в виде строк в массиве, вы можете собрать их, как это:

function getSelected() { 
    return $scope.operations_publish.filter(function (x,i) { 
     return $scope.operations[i] 
    }); 
} 

Проверка this fiddle для полного кода.

+0

Спасибо. Он ответил на мой вопрос, и теперь я получаю значения в массиве. Однако, когда я пытаюсь отправить объект JSON на контроллер Spring, я получаю сообщение об ошибке: 400 (Bad Request). Любая идея, что могло бы вызвать это? –

+0

Нет, извините, это действительно сложно сказать без дополнительной информации. Вы изучили запрос в своем браузере?Я имею в виду, получить фактический URL-адрес, который был запрошен, и параметры HTTP? – lex82

0

Согласно вашему примеру в списке, вы связали ваш ng-model к выражению operations, однако вы должны быть привязывая его к индивидуальному итератора operation (с) ng-repeat="operation in operations_publish" ,

Вы можете установить, что данные в вашем объекте DATALOG:

var dataObj = { 
    "operationType" : $scope.operationType, 
    "conceptModelID" : $scope.conceptID, 
    "requestor" : $scope.requestor, 
    "status" : "new", 
    "requestDateTime" : null, 
    "lastExecutedDateTime" : null, 
    "completedDateTime" : null, 
    "instructions" : $scope.operations_publish 
}; 

связывания данных по умолчанию в угловую поэтому разнонаправленности:

  1. operations_publish => связан грести через итератор operation
  2. operation => привязано к значению галочки через ng-model
  3. Когда значение флажок изменяется, вы изменяете переменную, к которой она привязана, и коллекцию, из которой переименована переменная.
Смежные вопросы