【发布时间】:2015-04-27 08:36:15
【问题描述】:
据我了解,ng-model 为分配模型的特定元素设置值。 鉴于 ng-value 与 ng-model 有何不同?
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-ng-model angularjs-ng-value
据我了解,ng-model 为分配模型的特定元素设置值。 鉴于 ng-value 与 ng-model 有何不同?
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-ng-model angularjs-ng-value
文档明确指出,在与ng-model 进行双向 绑定时,不应使用ng-value。
来自文档:
ngValue
将给定的表达式绑定到元素的值。
它还可以用于实现给定表达式的单向绑定到输入元素,例如
input[text]或textarea,当该元素不使用ngModel.
相反,从控制器初始化值:
【讨论】:
ng-value 指令绑定的变量的更改也不会更新ng-model 指令绑定的变量。 ng-value 只会在用户单击或选择该单选按钮时更新其绑定变量。
ng-model 指令忽略了AngularJS 框架对ng-value 指令绑定的变量的更改。 ng-model 指令仅对用户输入做出反应。
input 字段中的ng-value 的一个很好的用途是如果您想绑定到一个变量,但要基于另一个变量的值。示例:
<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 将保持不变。
【讨论】:
简单说明
ng-model
$modelValue(实际范围内的值)和$viewValue(视图中显示的值)。例如
<input type="text/checkbox/radio/number/tel/email/url" ng-model="test"/>
ng 值
ng-model 值,例如input,
select & textarea(同样可以使用ng-init)ng-model 值而编写 value 属性不支持它,ng-value 确实提供了良好的绑定select 选项时用于radio 和option 标记。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>
...
【讨论】:
它与 ng-model 结合使用;对于 radios 和 selects,它是在选择该项目时设置为 ng-model 的值。使用它作为元素的 'value' 属性的替代品,它将始终将字符串值存储到关联的 ng-model。
在单选按钮的上下文中,它允许您使用非字符串值。例如,如果您有单选按钮“是”和“否”(或等效),其值为“真”和“假” - 如果您使用“值”,则存储在 ng-model 中的值将变为字符串。如果您使用“ng-value”,它们将保持为布尔值。
但是,在 select 元素的上下文中,请注意 ng-value 仍将始终被视为字符串。要为选择设置非字符串值,请使用 ngOptions。
【讨论】:
根据https://docs.angularjs.org/api/ng/directive/ngValue,ngValue采用“角度表达式,其值将绑定到输入元素的value属性”。
因此,当您使用 ng-value="hard" 时,它被解释为一个表达式,并且该值绑定到 $scope.hard(这可能是未定义的)。 ngValue 对于评估表达式很有用——它对设置硬编码值的 value 没有任何优势。然而,如果你想用 ngValue 硬编码一个值,你必须用 '' 括起来:
ng-value="'hard'"
ng-model 旨在放置在表单元素中,并具有双向数据绑定($scope --> view 和 view --> $scope),例如<input ng-model="val"/>.
或者你可以说 ng-model 指令将 HTML 控件(输入、选择、文本区域)的值绑定到应用程序数据。
【讨论】:
ngValue是单向绑定,ngModel是双向绑定。