2013-12-23 3 views
7

У меня проблема, когда я пытаюсь опубликовать значение флажка в моей модели на сервере, и поскольку флажок не был связан с формой, угловой, похоже, не был назначен это значение, когда я запрашиваю значение флажка, оно возвращается как неопределенное.Значение модели checkbox модели AngularJS не определено

Вот моя разметка:

<div class="form-group"> 
    <input id="templateDisable" type="checkbox" ng-model="template.disabled" /> 
    <label for="templateDisable">Disabled</label> 
</div> 

А вот сокращенная версия моего спасения действий на моем контроллере:

$scope.save = function (form) { 
    if (form.$valid) { 
     var formData = new FormData(); 
     // this is the problem line of code 
     formData.append("disabled", $scope.template.disabled); 
     // ... some other stuff 
    } 
}; 

На самом деле, тикает затем сняв выделение флажка, прежде чем я ударил сохранить результаты действий в свойстве template.disabled будет false, чего я ожидал бы без ручного вмешательства.

Я видел другие связанные вопросы, например. AngularJS: Initial checkbox value not in model, но наверняка вещи, как простой флажок, нужно испечь? Мне не нужно было писать директивы для управления флажками?

ответ

9

Это дизайн. Если вам требуется значение по умолчанию для вашей модели, то вы должны инициализировать его внутри контроллера (рекомендуется) или использовать ng-init.

app.controller('AppController', 
    [ 
     '$scope', 
     function($scope) { 
     $scope.template = { 
      disabled = false 
     }; 
     } 
    ] 
); 
<div class="form-group"> 
    <input type="checkbox" ng-model="template.disabled" ng-init="template.disabled=false" /> 
    <label>Disabled</label> 
</div> 
+0

В чем преимущество сохранения свойств модели неопределенными? –

+1

Я бы сказал, что их несколько. a) Модель не изменяется неявно, просто привязывая ее к элементу управления. Это было бы плохой дизайн, ИМХО. b) Консистенция сохраняется, потому что если был установлен флажок, чтобы установить модель в значение false по умолчанию, то я думаю, что текстовый ввод также должен был бы установить начальное значение в пустую строку '', чтобы все было согласовано. Но это тоже плохой дизайн. – Stewie

+0

Как @NeilAtkinson указал ниже, это всегда будет устанавливать значение false, даже если оно было истинным в первую очередь. –

6

Следующая всегда будет установить состояние обратно в «бесконтрольно» при загрузке страницы (или обновляется). Другими словами, он будет перезаписывать фактический выбор пользователя всякий раз, когда страница обновляется.

<input type="checkbox" ng-model="template.disabled" 
ng-init="template.disabled=false" /> 

Если, однако, вы хотите, чтобы состояние флажок установлен в состояние по умолчанию первоначально и вы также хотите, чтобы помнить взаимодействия с пользователем, то следующее, что вы хотите.

<input type="checkbox" ng-model="template.disabled" 
ng-init="template.disabled = template.disabled || false" /> 
Смежные вопросы