关于javascript:ng-model和ng-value之间有什么区别/不兼容?

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模型

  • 用于变量的双向绑定,可以在作用域以及html上使用。
  • 其中具有$modelValue(值位于实际范围内)和$viewValue(值显示在视图上)。
  • 如果您在表单上提到了具有name属性的表单,那么angular会在内部为其创建验证属性,例如$ error,$ valid,$ invalid等。
  • 例如。

    1
    <input type="text/checkbox/radio/number/tel/email/url" ng-model="test"/>

    ng值

  • 用于将值分配给各个ng-model值,例如input
    selecttextarea(可以使用ng-init来完成)
  • 如果通过ajax设置ng-model值而编写value属性不支持它,则ng-value确实提供了良好的绑定
  • 基本上旨在在动态创建select选项时用于radiooption标记。
  • 它只能具有string值,不支持对象值。
  • 的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>

    ...


    如果要绑定到变量,但要基于另一个变量的值,则input字段中的ng-value很好用。例:

    1
    2
    3
    4
    The code is {{model.code}}.
    <p>
    Set the new code: <input type="text" ng-bind="model.code" />
    </p>

    当用户键入input时,标题中的值将被更新。如果您不想这样做,可以修改为:

    1
    <input type="text" ng-value="model.code" ng-bind="model.theNewCode" />

    theNewCode将被更新,但是code将保持不变。


    根据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控件(输入,选择,文本区域)的值绑定到应用程序数据。


    文档明确指出,与ng-model进行双向绑定时,不应使用ng-value

    从文档中:

    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 a textarea, when that element does not use ngModel.

    — AngularJS ng-value Directive API Reference

    而是从控制器初始化值: