javascript - ¿Cuál es la diferencia/incompatibilidad entre ng-model y ng-value?
ng-select (5)
Por lo que he entendido, ng-model establece el valor para ese elemento particular en el que se asigna el modelo. dado que ¿en qué se diferencia ng-value de ng-model?
De acuerdo con https://docs.angularjs.org/api/ng/directive/ngValue , ngValue toma una "expresión angular, cuyo valor estará vinculado al atributo de valor del elemento de entrada".
Entonces, cuando usa ng-value = "hard", se interpreta como una expresión y el valor está vinculado a $ scope.hard (que probablemente no está definido). ngValue es útil para evaluar expresiones: no tiene ninguna ventaja sobre el valor para establecer valores codificados. Sin embargo, si desea codificar un valor con ngValue, debe encerrarlo en '''':
ng-value = "''hard''"
ng-model
está diseñado para colocarse dentro de elementos de formulario y tiene enlace de datos bidireccional ($ scope -> view y view -> $ scope), por ejemplo,
<input ng-model="val"/>.
o puede decir que la directiva ng-model vincula el valor de los controles HTML (input, select, textarea) a los datos de la aplicación.
Descripción simple
ng-model
- Se utiliza para el enlace bidireccional de variables que pueden estar disponibles en el alcance, así como en html.
-
que tiene
$modelValue
(el valor reside en el alcance real) y$viewValue
(valor que se muestra en la vista). - Si mencionó en el formulario con el atributo de nombre, angular crea internamente atributos de validación para él como $ error, $ válido, $ inválido, etc.
P.ej.
<input type="text/checkbox/radio/number/tel/email/url" ng-model="test"/>
ng-value
-
Se usa para asignar valor al valor
ng-model
respectivo comoinput
,select
&textarea
(lo mismo se puede hacer usandong-init
) -
ng-value
proporciona un buen enlace si está configurando el valor deng-model
través de ajax mientras que escribir el atributovalue
no lo admite -
Básicamente destinado a usarse para
radio
y etiqueta deoption
mientras se crean opciones deselect
dinámicamente. -
Solo puede tener un valor de
string
, no admite el valor del objeto.
HTML
<input
[ng-value="string"]>
...
</input>
O
<select ng-model="selected">
<option ng-value="option.value" ng-repeat="option in options">
{{option.name}}
</option>
</select>
...
Funciona en conjunción con ng-model; para radios y selecciones, es el valor que se establece en el modelo ng cuando se selecciona ese elemento. Úselo como una alternativa al atributo ''valor'' del elemento, que siempre almacenará un valor de cadena en el modelo ng asociado.
En el contexto de los botones de opción, le permite usar valores que no sean cadenas. Por ejemplo, si tiene los botones de opción ''Sí'' y ''No'' (o equivalente) con los valores ''verdadero'' y ''falso'', si usa ''valor'', los valores almacenados en su modelo ng se convertirán en cadenas. Si usa ''ng-value'', seguirán siendo booleanos.
Sin embargo, en el contexto de un elemento select, tenga en cuenta que el valor ng siempre se tratará como una cadena. Para establecer valores que no sean cadenas para una selección, use ngOptions.
La documentación establece claramente que
ng-value
no debe usarse cuando se realiza
un
enlace
bidireccional
con
ng-model
.
De los documentos:
ngValue
Vincula la expresión dada al valor del elemento.
También se puede usar para lograr el enlace unidireccional de una expresión dada a un elemento de entrada como una
input[text]
o un área detextarea
, cuando ese elemento no usangModel
.
En su lugar, inicialice el valor del controlador:
Un buen uso de
ng-value
en
input
campos de
input
es si desea enlazar a una variable, pero en función del valor de otra variable.
Ejemplo:
<h1>The code is {{model.code}}.</h1>
<p>Set the new code: <input type="text" ng-bind="model.code" /></p>
Cuando el usuario escribe la
input
, el valor en el título se actualizará.
Si no desea esto, puede modificarlo para:
<input type="text" ng-value="model.code" ng-bind="model.theNewCode" />
theNewCode
se actualizará, pero el
code
permanecerá intacto.