Подтвердить что ты не робот

Какая разница/несовместимость между ng-моделью и ng-значением?

Насколько я понял, ng-model устанавливает значение для этого конкретного элемента, в котором была назначена модель. учитывая, что как ng-значение отличается от ng-модели?

4b9b3361

Ответ 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.

AngularJS ng-value Directive API Reference

Вместо этого инициализируйте значение из контроллера: