Угловые значения ng-модели не зарегистрированы при отправке

0

Я знаю, что название немного неоднозначно, но вот проблема: у меня есть 2 поля ввода в форме, которая выглядит так:

<form name="modifyApp" class="form-signin" ng-submit="modify(val)">
   <input type="text" class="form-control" ng-model="val.name" id="appName">
   <input type="number" class="form-control" ng-model="val.number" id="number" min="0" max="65535">
   <button type="submit">Submit</button>
</form>

Когда я загружаю страницу, я заполняю эти два с некоторыми значениями внутри контроллера:

angular.module('myApp').controller('modifyAppController', ['$scope', function($scope) {
    function setFields(appName, appNumber){
        document.getElementById("appName").value = appName
        document.getElementById("number").value = appNumber
    }

    $scope.modify= function(val){
        console.log(val)
    }
}])

Проблема в том, что я нажимаю кнопку "Отправить". Значения не будут зарегистрированы, если я их не изменю. Например, если я нажимаю кнопку "Отправить", ничего не печатается, но если я изменю номер или имя, оно будет напечатано.

  • 2
    Какова цель установки полей ввода не через AngularJS?
  • 0
    Если вы уже используете ng-модель, почему вы пытаетесь это сделать?
Теги:
angular-ngmodel

3 ответа

0
Лучший ответ

В вашем контроллере вы можете просто инициализировать объект val таким образом:

angular.module('myApp', [])

.controller('modifyAppController', ['$scope', function($scope) {

  $scope.val = {
    name: '',
    number: 0
  };

  function setFields(appName, appNumber) {
    $scope.val.name = appName;
    $scope.val.number = appNumber;
  }

  $scope.modify = function(val) {
    console.log(val);
  };
}]);
  • 0
    Это было так просто, спасибо за этот ответ! Что делать, если у меня есть две радио-кнопки, и я хочу проверить одну из них, когда я использую функцию setFields . Как мне это сделать? Как инициализировать одну из переключателей в $ scope.val ?
  • 0
    Пожалуйста. Вы бы просто привязали переключатели к переменной $ scope с помощью ng-model. Затем вы можете оценить переменную $ scope в setFields ()
Показать ещё 1 комментарий
0

почему бы просто не сделать следующее в качестве первой строки в вашей форме

<form name="modifyApp" class="form-signin" ng-submit="modify()">

и тогда ваш контроллер может выглядеть так

$scope.val = {
  name: '',
  number:0//some default values
}
$scope.modify= function(){
    console.log($scope.val)
}
0

Вам нужно переписать контроллер:

angular.module('myApp').controller('modifyAppController', ['$scope', function($scope) {
    $scope.val = {
        name = 'My app name',
        number = '1'
    };

    function setFields(appName, appNumber){
        $scope.val.name = appName;
        $scope.val.number = appNumber;
    }

    $scope.modify= function(){
        console.log($scope.val);
    }
}])

Вам не нужно напрямую изменять значения DOM в Angular. Все ваши переменные $ scope доступны в вашем шаблоне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню