Я пытаюсь написать простую страницу с несколькими входами, которые должны быть 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
отдельно угловым?
То, что вы делаете не так, прежде всего, использует нелегальные идентификаторы для моделей. 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/>
PS и небольшое примечание, закрывающие теги игнорируются для <input>
ng-model
. Я не осознавал, что (1) это будет переменная в области видимости, и (2) что эта переменная будет значением ввода. Я думал, что модели были чем-то совершенно другим.ngInit
не должна использоваться в этом случае, так как она есть в docs: docs.angularjs.org/api/ng/directive/ngInit . Запустите значение в контроллере в этом случае.