Как мне требовать несколько полей ввода в AngularJS?

0

Я пытаюсь написать простую страницу с несколькими входами, которые должны быть required, чтобы не быть пустым.

Здесь код для этого (автономный):

<!DOCTYPE html>
<html>
    <head>
        <script src="/angular.min.js"></script>
        <script>
            var app = angular.module("myApp", []);
            app.controller('myController', ['$scope', function($scope) {
            }]);
        </script>
        <style>
            input.ng-invalid {
                background-color: pink;
            }
            input.ng-valid {
                background-color: lightgreen;
            }
        </style>
    </head>
    <body ng-app="myApp">
        <div ng-controller="myController">
            Description: *<input type="text" id="input-description" ng-model="req-text" required></input><br/>
            Order: *<input type="number" id="input-order" ng-model="req-number" value="100" step="100" required></input><br/>
        </div>
    </body>
</html>

Я надеялся, что это будет сделано, начиная с того, что текстовое поле пустым и красным (недействительным), а поле с номером 100 и зеленым (действительным).

Первое, что я пробовал, - это установить для ng-model входные данные на одну и ту же вещь, но это вызвало изменение номера поля в текстовом поле, когда оно было обновлено (но не наоборот).

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

Что я делаю не так, и как я могу просто получить оба входа должен быть required отдельно угловым?

1 ответ

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

То, что вы делаете не так, прежде всего, использует нелегальные идентификаторы для моделей. req-number не является допустимым идентификатором для переменной. (помните, что все эти модели на самом деле называются $scope.variableName, представьте $scope.req-number). Следовательно, ваши входы сделаны только для чтения. Фактически вы можете увидеть это при просмотре консоли своего браузера.

Во-вторых, value атрибута html игнорируется для input в этом случае. Используйте функцию контроллера для установки значений по умолчанию для ваших моделей.

   app.controller('myController', ['$scope', function($scope) {
       $scope.req_number = 100;
   }]);
   ....
   <div ng-controller="myController">
        Description: *<input type="text" ng-model="req_text" REQUIRED><br/>
        Order: *<input type="number" ng-model="req_number" required><br/>
   </div>

В качестве альтернативы вы можете использовать ng-init для ng-init модели. Однако, как упоминалось в @developer0333, это не рекомендуется, поскольку логика инициализации является частью бизнес-логики, и с развитием проекта может усложниться, а просто установить примитивные значения.

<input type="number" ng-model="req_number" ng-init="req_number=100" required><br/>

Plunker с правильным кодом

PS и небольшое примечание, закрывающие теги игнорируются для <input>

  • 0
    Большое спасибо! Кажется, я был немного смущен тем, что сделала ng-model . Я не осознавал, что (1) это будет переменная в области видимости, и (2) что эта переменная будет значением ввода. Я думал, что модели были чем-то совершенно другим.
  • 0
    Директива ngInit не должна использоваться в этом случае, так как она есть в docs: docs.angularjs.org/api/ng/directive/ngInit . Запустите значение в контроллере в этом случае.
Показать ещё 1 комментарий

Ещё вопросы

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