В чем разница между атрибутом `value` и атрибутами` ng-value` в angularjs

В чем разница между атрибутами value и ng-value в шаблонах angularjs? Если я использую ng-if в поле, используя атрибут value, он работает правильно, но если я изменю атрибут value на ng-value, он перестанет работать.

example 1  // it works 

<input type='radio' ng-model='difficulty' value='hard'/>
<div ng-if="difficulty == 'hard'">
     <p>difficulty is hard</p>
</div>  

Example 2 // it doesn't work

<input type='radio' ng-model='level' ng-value='hard'/>
<div ng-if= "level == 'hard'" >
     <p>level is hard</p>
</div>

Ответы

Ответ 1

В соответствии с docs, ngValue принимает выражение angular, значение которого будет связанный с атрибутом value элемента input ".

Итак, когда вы используете ng-value="hard", он интерпретируется как выражение, а value привязан к $scope.hard (что, вероятно, undefined).
ngValue полезен для оценки выражений - у него нет преимуществ перед value для установки жестко заданных значений. Тем не менее, если вы хотите жестко закодировать значение с помощью ngValue, вы должны заключить его в '':

ng-value="'hard'"

UPDATE:
Начиная с v1.6, ngValue также установит свойство value элемента (в дополнение к атрибуту value). Это может не повлиять на ваш usecase, но это еще одна разница, стоит иметь в виду.