2012-06-24 29 views
15

¿Cómo accedo a los campos ocultos en angular? Tengo una aplicación en la que deseo enviar un formulario para cada uno de los elementos de la lista. El formulario es simple: tiene un botón de enviar y un campo oculto que contiene el valor de ID. Pero no funciona. El valor está vacío.Campos ocultos en AngularJs

Actualicé el ejemplo angular predeterminado para mostrar la situación: el texto de tareas pendientes se encuentra en el campo oculto.

http://jsfiddle.net/tomasfejfar/yFrze/

+0

Podría tomar un ejemplo más simple del problema? Aquí hay un violín de base: http://jsfiddle.net/andytjoslin/DkMyP/ –

+0

Por supuesto: http://jsfiddle.net/DkMyP/1/ –

Respuesta

2

En su violín más simple, el problema se puede solucionar mediante el uso de ng-init o establecer un valor inicial en el controlador. El atributo value no afectará el ng-modelo.

http://jsfiddle.net/andytjoslin/DkMyP/2/

Además, su ejemplo inicial (http://jsfiddle.net/tomasfejfar/yFrze/) funciona para mí en su estado actual en Chrome 15/Windows 7.

+0

Pero eso solo funciona una vez. La próxima vez que la variable esté vacía. –

+0

Ah, eso es porque en el ejemplo todo 'todoText' se establece en una cadena en blanco en la función 'addTodo'. –

+0

obviamente! ¡Oh mierda! : D Gracias! : D –

8

si quieres pase la ID de ng-repeat a su código, no tiene que usar un campo oculto. Esto es lo que hice:

Por ejemplo, digamos que estoy bucle a través de una colección de películas, y al hacer clic en el "leer más" enlace pasará su identificación con el código JS:

<ul> 
    <li ng-repeat="movie in movies"> 
    {{movie.id}} {{movie.title}} <a href="#" ng-click="movieDetails(movie)">read more</a> 
    </li> 
</ul> 

Luego, en su código JS, puede obtener la ID como esta:

$scope.movieDetails = function (movie) { 
    var movieID = movie.id; 
} 
+0

¡increíble! gracias –

2

Puede hacer algo como esto.
Es un truco sucio, pero funciona (como la mayoría de los trucos sucios ;-)
Usted sólo tiene que utilizar el nombre del formulario como su campo oculto
y siempre da la forma de la "forma" Identificación

<!doctype html><html ng-app><head> 
<script src="angular-1.0.1.min.js"></script> 
<script> 
function FormController($scope) { 
    $scope.processForm = function() {alert("processForm() called."); 
    $scope.formData.bar = ""; 
    try {$scope.formData.bar = document.getElementById("form").name;} 
    catch(e) {alert(e.message);} 
    alert("foo="+$scope.formData.foo+ " bar="+$scope.formData.bar); 
    }; 
} 
</script></head><body> 
<div ng-controller="FormController"> 
<form name="YourHiddenValueHere" id="form"> 
<input type="text" ng-model="formData.foo" /> 
<button ng-click="processForm()"> SUBMIT </button> 
</form> 
</div></body></html> 

Esto le permite utilizar UN controlador para TODOS los formularios y enviarlos a
a un script de servidor. La secuencia de comandos que se distingue por el nombre de formulario
(formData.foo) y sabe qué hacer.
El campo oculto nombra la operación en este escenario.

Voila - Tiene una aplicación completa con
como muchas formas que desee y una secuencia de comandos de servidor
y una FormController para todos ellos.

0

tengo que corregir (mejorar) a mí mismo:
usted puede hacerlo más elegante:

<form> 
<input type="text" ng-model="formData.foo" /> 
<input type="hidden" id="bar" value="YourHiddenValue" /> 
<button ng-click="processForm()"> SUBMIT </button> 
</form> 


y luego en el controlador javascript:

$scope.formData.bar = ""; 
try {$scope.formData.bar = document.getElementById("bar").value;} 
catch(e) {alert(e.message);} 
alert("foo="+$scope.formData.foo+ " bar="+$scope.formData.bar); 


Para que pueda tener tantos campos ocultos como desee.

13

Si no desea codificar cualquier cosa en su archivo JavaScript, puede cargarlo a través de AJAX, o hacer:

<input type="hidden" name="value" ng-init="model.value=1" value="1"> 

esta manera, se puede mantener la funcionalidad formulario con JS fuera, y seguir utilizando el campo oculto en AngularJS

+2

Uso: '' . De esta forma, los cambios en 'model.value' se actualizarán en el valor de entrada. – GFoley83

+1

no es necesario establecer un valor oculto para el valor del modelo, ya que no es algo que el usuario cambie. el valor del modelo se puede mantener en el alcance sin alterar el DOM – pocesar

+1

¿Qué sucede si desea acceder al valor de ese modelo (o algún valor interpolado) en una devolución de datos? Sería bastante útil entonces. Solo destaco otro caso de uso útil para campos ocultos. – GFoley83

0

más simple:

<input type="hidden" name="livraisonID" value="{{livraison.id}}"/> 

funciona!

0

Utilice = unión NG- "{{}} employee.data" que funcionará correctamente ## Partida ##

Cuestiones relacionadas