What's the difference/incompatibility between ng-model and ng-value?
据我了解,ng-model可以为分配模型的特定元素设置值。
鉴于ng值与ng模型有何不同?
它与ng-model结合使用;对于radios和selects,是选择该项目时设置为ng-model的值。用它替代元素的"值"属性,该属性将始终将字符串值存储到关联的ng-model。
在单选按钮的上下文中,它允许您使用非字符串值。例如,如果您有单选按钮"是"和"否"(或等效按钮),其值为" true"和" false"-如果您使用" value",则存储在ng-model中的值将成为字符串。如果您使用" ng-value",则它们将保持布尔值。
但是,在select元素的上下文中,请注意ng-value仍将始终视为字符串。要为选择设置非字符串值,请使用ngOptions。
简单说明
ng模型
例如。
1 | <input type="text/checkbox/radio/number/tel/email/url" ng-model="test"/> |
ng值
的HTML
1 2 3 4 | <input [ng-value="string"]> ... </input> |
要么
1 2 3 4 5 | <select ng-model="selected"> <option ng-value="option.value" ng-repeat="option in options"> {{option.name}} </option> </select> |
...
如果要绑定到变量,但要基于另一个变量的值,则
1 2 3 4 | The code is {{model.code}}. <p> Set the new code: <input type="text" ng-bind="model.code" /> </p> |
当用户键入
1 | <input type="text" ng-value="model.code" ng-bind="model.theNewCode" /> |
根据https://docs.angularjs.org/api/ng/directive/ngValue,ngValue采用"角度表达式,其值将绑定到输入元素的value属性"。
因此,当您使用ng-value =" hard"时,它将被解释为一个表达式,并且该值绑定到$ scope.hard(可能未定义)。
ngValue对于评估表达式很有用-在设置硬编码值方面,它比值没有优势。但是,如果您想使用ngValue对值进行硬编码,则必须将其括在":"中:
ng-value ="'hard'"
ng-model用于放置在表单元素中,并且具有双向数据绑定($ scope-> view and view-> $ scope),例如
或者您可以说ng-model指令将HTML控件(输入,选择,文本区域)的值绑定到应用程序数据。
文档明确指出,与
从文档中:
ngValue
Binds the given expression to the value of the element.
It can also be used to achieve one-way binding of a given expression to an input element such as an
input or atextarea , when that element does not usengModel .— AngularJS
ng-value Directive API Reference
而是从控制器初始化值: