Сохранить пустое поле в модели с помощью Angular

Если у меня есть угловая форма, подобная этой

<form name="myForm">
  <input type="text" required ng-model="field1" />
  <input type="text" ng-model="field2" />
</form>

Когда я получаю доступ к модели, она будет содержать только те поля, которые имеют значения, поэтому, если оба поля имеют значения, json будет {"поле1":"значение1","поле2":"значение2"}. Если только field1 имеет значение, json будет {"field1":"value1"}. Могу ли я указать Angular сохранять пустые поля в модели с нулевыми значениями?

ОБНОВЛЕНИЕ:

Мой контроллер выглядит так, как показано ниже. Я загружаю данные как json с сервера. Когда данные поступают с сервера, я получаю это {"поле1":"значение1","поле2":"значение2"}, но когда запускается saveContent и только поле1 имеет значение, сервер получает это {"поле1":"значение1" }.

var myApp = angular.module('myApp', []);
myApp.controller('contentEditController', ['$scope', '$http',
  function ($scope, $http) {

      $scope.saveContent = function () {
          $http.post("/api/ContentData", $scope.formdata);
      };

      $scope.loadContent = function (contentId) {
          $http.get("/api/ContentData/" + contentId)
              .success(function (response) {
                  $scope.formdata = response;
               });
      }

  }]);

Таким образом, поля, которые имели значения, когда они пришли с сервера, не отправляются обратно как пустые.

-Матиас


person Mathias Rönnlund    schedule 07.01.2015    source источник


Ответы (2)


Инициализируйте значения в области видимости в контроллере,

.controller('formcontroller', [ '$scope', function($scope){
  $scope.field1 = "";
  $scope.field2 = "";
})];
person MikeDev    schedule 07.01.2015
comment
Спасибо за ответ. Что, если у меня нет таких значений отдельно, как я указал в обновленном вопросе? - person Mathias Rönnlund; 07.01.2015
comment
Пока вы используете директиву ng-model для привязки полей формы к области, вы все равно должны иметь возможность инициализировать их отдельно, и вы должны это делать, если поле необходимо для вызова на сервер. - person MikeDev; 07.01.2015

Правильный способ сделать это — инициализировать переменные. Вы должны в своем контроллере иметь

$scope.field1 = ""
$scope.field2 = ""

или более грубый способ - использовать ng-init (старайтесь не использовать ng-init, если можете)

<input type="text" required ng-model="field1" ng-init="field1=''"/>
<input type="text" ng-model="field2" ng-init="field2=''"/>
person yangli-io    schedule 07.01.2015