Насколько я понял, ng-model устанавливает значение для этого конкретного элемента, в котором была назначена модель. учитывая, что как ng-значение отличается от ng-модели?
Какая разница/несовместимость между ng-моделью и ng-значением?
Ответ 1
Он работает в сочетании с ng-model; для радиоприемников и выборок это значение, которое задано в ng-модели, когда этот элемент выбран. Используйте его как альтернативу атрибуту "значение" элемента, который всегда будет хранить строковое значение для соответствующей ng-модели.
В контексте переключателей он позволяет использовать нестрочные значения. Например, если у вас есть переключатели "Да" и "Нет" (или эквивалент) со значениями "true" и "false" - если вы используете "значение", значения, сохраненные в вашей ng-модели, станут строками. Если вы используете "ng-value", они будут оставаться booleans.
Однако в контексте элемента select обратите внимание, что значение ng всегда будет рассматриваться как строка. Чтобы установить нестрочные значения для выбора, используйте ngOptions.
Ответ 2
Простое описание
ng-model
- Используется для двусторонней привязки переменной, которая может быть доступна как по области видимости, так и по html.
- который имеет
$modelValue
(значение находится в действительной области) и$viewValue
(значение отображается в представлении). - Если вы указали в форме с атрибутом name, тогда angular внутренне создает для него атрибуты проверки как $error, $valid, $invalid и т.д.
Eg.
<input type="text/checkbox/radio/number/tel/email/url" ng-model="test"/>
ng-value
- Используется для присвоения значения соответствующему значению
ng-model
, напримерinput
,select
иtextarea
(то же самое можно сделать, используяng-init
) -
ng-value
действительно обеспечивает хорошее связывание, если вы устанавливаете значениеng-model
через ajax, а атрибутvalue
не поддерживает его - В основном используется для тегов
radio
иoption
при динамическом созданииselect
. - Он может иметь значение
string
, оно не поддерживает значение объекта.
HTML
<input
[ng-value="string"]>
...
</input>
ИЛИ
<select ng-model="selected">
<option ng-value="option.value" ng-repeat="option in options">
{{option.name}}
</option>
</select>
...
Ответ 3
Хорошее использование для полей ng-value
в input
- это если вы хотите привязываться к переменной, но на основе другого значения переменной. Пример:
<h1>The code is {{model.code}}.</h1>
<p>Set the new code: <input type="text" ng-bind="model.code" /></p>
Когда пользователь вводит значение input
, значение в заголовке будет обновляться. Если вы этого не хотите, вы можете изменить на:
<input type="text" ng-value="model.code" ng-bind="model.theNewCode" />
theNewCode
будет обновляться, но code
останется нетронутым.
Ответ 4
В соответствии с https://docs.angularjs.org/api/ng/directive/ngValue, ngValue принимает выражение angular, значение которого будет привязано к атрибуту value входного элемента ".
Итак, когда вы используете ng-value = "hard", оно интерпретируется как выражение, а значение привязано к $scope.hard(что, вероятно, undefined). ngValue полезен для оценки выражений - он не имеет преимущества перед значением для установки жестко заданных значений. Тем не менее, если вы хотите жестко закодировать значение с помощью ngValue, вы должны заключить его в '::
нг-value = "'жесткий'"
ng-model предназначена для размещения внутри элементов формы и имеет двустороннюю привязку данных ($ scope → view and view → $scope), например. <input ng-model="val"/>.
или вы можете сказать, что директива ng-model связывает значение элементов управления HTML (ввода, выбора, textarea) с данными приложения.
Ответ 5
В документации четко указано, что ng-value
не следует использовать при выполнении двустороннего связывания с ng-model
.
Из документов:
ngValue
Привязывает данное выражение к значению элемента.
Он также может быть использован для достижения односторонней привязки данного выражения к элементу ввода, такому как
input[text]
илиtextarea
, , когда этот элемент не используетngModel
.
Вместо этого инициализируйте значение из контроллера: