Tengo algunas casillas de verificación:
<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">
Que me gustaría vincular a una lista en mi controlador de modo que cada vez que se cambie una casilla de verificación, el controlador mantenga una lista de todos los valores marcados, por ejemplo ['apple', 'pear']
,.
Parece que ng-model solo puede vincular el valor de una única casilla de verificación a una variable en el controlador.
¿Hay otra forma de hacerlo para poder vincular las cuatro casillas de verificación a una lista en el controlador?
javascript
angularjs
nickponline
fuente
fuente
<input type='checkbox' ng-model="checkboxes.apple">
, etc. El modelo sería: {"manzana": verdadero, "naranja": falso, "pera": verdadero, "naartjie": verdadero}naartjie
!? Eso solo te delata boet! : DRespuestas:
Hay dos formas de abordar este problema. Utilice una matriz simple o una matriz de objetos. Cada solución tiene sus pros y sus contras. A continuación encontrará uno para cada caso.
Con una matriz simple como datos de entrada
El HTML podría verse así:
Y el código del controlador apropiado sería:
Pros : estructura de datos simple y alternar por nombre es fácil de manejar
Contras : Agregar / quitar es engorroso ya que se deben administrar dos listas (la entrada y la selección)
Con una matriz de objetos como datos de entrada
El HTML podría verse así:
Y el código del controlador apropiado sería:
Pros : Agregar / quitar es muy fácil
Contras : la estructura de datos algo más compleja y alternar por nombre es engorrosa o requiere un método auxiliar
Demostración : http://jsbin.com/ImAqUC/1/
fuente
value="{{fruit.name}}"
yng-checked="fruit.checked"
son superfluos, ya que se usa ng-model.Una solución simple:
http://plnkr.co/edit/U4VD61?p=preview
fuente
(color,enabled) in colors
?colors
es un objeto, cuando lo iteras, obtienes pares de(key,value)
.colors
debe nombrarseisSelected
, es mucho más fácil de leerisSelected[color]
quecolors[color]
.
fuente
Aquí hay una pequeña y rápida directiva reutilizable que parece hacer lo que estás buscando hacer. Simplemente lo he llamado
checkList
. Actualiza la matriz cuando cambian las casillas de verificación, y actualiza las casillas de verificación cuando cambia la matriz.Aquí hay un controlador y una vista que muestra cómo puede usarlo.
(Los botones demuestran que cambiar la matriz también actualizará las casillas de verificación).
Finalmente, aquí hay un ejemplo de la directiva en acción en Plunker: http://plnkr.co/edit/3YNLsyoG4PIBW6Kj7dRK?p=preview
fuente
value: '@'
porvalue: '=ngValue'
En base a las respuestas en este hilo, he creado una directiva de modelo de lista de verificación que cubre todos los casos:
Para el caso de inicio de tema sería:
fuente
selectedFruits
.Usar una cadena de
$index
puede ayudar a usar un hashmap de valores seleccionados:De esta forma, el objeto ng-model se actualiza con la clave que representa el índice.
Después de un tiempo
$scope.someObject
debería verse algo así como:Este método no funcionará en todas las situaciones, pero es fácil de implementar.
fuente
Como aceptó una respuesta en la que no se utilizó una lista, asumiré que la respuesta a mi pregunta de comentario es "No, no tiene que ser una lista". También tuve la impresión de que tal vez estaba leyendo el lado del servidor HTML, ya que "marcado" está presente en su HTML de muestra (esto no sería necesario si se usara ng-model para modelar sus casillas de verificación).
De todos modos, esto es lo que tenía en mente cuando hice la pregunta, también suponiendo que estaba generando el lado del servidor HTML:
ng-init permite que el HTML generado del lado del servidor establezca inicialmente ciertas casillas de verificación.
Violín .
fuente
Creo que la solución más fácil sería usar 'select' con 'multiple' especificado:
De lo contrario, creo que tendrá que procesar la lista para construirla (al
$watch()
vincular la matriz del modelo con casillas de verificación).fuente
He adaptado la respuesta aceptada de Yoshi para tratar con objetos complejos (en lugar de cadenas).
HTML
JavaScript
Ejemplo de trabajo: http://jsfiddle.net/tCU8v/
fuente
<input type="checkbox">
sin envoltura o combinación<label>
! Ahora sus usuarios tienen que hacer clic en la casilla de verificación real en lugar del texto al lado de la casilla de verificación, lo cual es mucho más difícil y tiene una mala usabilidad.Otra directiva simple podría ser:
El controlador:
Y el HTML:
También estoy incluyendo un Plunker: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview
fuente
La siguiente solución parece una buena opción,
Y en el modelo del controlador el valor
fruits
será asífuente
No tienes que escribir todo ese código. AngularJS mantendrá el modelo y las casillas de verificación sincronizadas simplemente usando ngTrueValue y ngFalseValue
Codepen aquí: http://codepen.io/paulbhartzog/pen/kBhzn
Fragmento de código:
fuente
Consulte esta directiva que gestiona efectivamente las listas de casillas de verificación. Espero que te funcione. Modelo de lista de verificación
fuente
Hay una manera de trabajar directamente en la matriz y usar ng-model al mismo tiempo
ng-model-options="{ getterSetter: true }"
.El truco es usar una función getter / setter en su modelo ng. De esta manera, puede usar una matriz como su modelo real y "falsificar" los booleanos en el modelo de entrada:
PRUEBA No debe usar este método si sus matrices son grandes, como
myGetterSetter
se llamará muchas veces.Para obtener más información al respecto, consulte https://docs.angularjs.org/api/ng/directive/ngModelOptions .
fuente
Me gusta la respuesta de Yoshi. Lo mejoré para que pueda usar la misma función para varias listas.
http://plnkr.co/edit/KcbtzEyNMA8s1X7Hja8p?p=preview
fuente
Si tiene varias casillas de verificación en el mismo formulario
El código del controlador
Ver código
fuente
Inspirado en la publicación de Yoshi arriba. Aquí está el plnkr .
fuente
Basado en mi otra publicación aquí , he hecho una directiva reutilizable.
Echa un vistazo al repositorio de GitHub
fuente
En el HTML (suponiendo que las casillas de verificación estén en la primera columna de cada fila de una tabla).
En el
controllers.js
archivo:fuente
Aquí hay otra solución más. La ventaja de mi solución:
Aquí está la directiva:
Al final, simplemente úsalo así:
Y eso es todo lo que hay. La única adición es el
checkbox-array-set
atributo.fuente
Puede combinar AngularJS y jQuery. Por ejemplo, debe definir una matriz,,
$scope.selected = [];
en el controlador.Puede obtener una matriz propietaria de los elementos seleccionados. Usando el método
alert(JSON.stringify($scope.selected))
, puede verificar los elementos seleccionados.fuente
fuente
Echa un vistazo a esto: lista de verificación-modelo .
Funciona con matrices de JavaScript y objetos y puede usar casillas de verificación HTML estáticas, sin ng-repeat
Y el lado de JavaScript:
fuente
Una forma simple de hacerlo en HTML:
fuente
Usando este ejemplo de @Umur Kontacı, pienso en usar para capturar datos seleccionados en otro objeto / matriz, como una página de edición.
Opciones de captura en la base de datos
Alternar una opción
Como ejemplo, todos los colores json a continuación:
Y 2 tipos de objeto de datos,
array
con un objeto y queobject
contienen dos / más datos de objeto:Dos elementos seleccionados capturados en la base de datos:
Un elemento seleccionado capturado en la base de datos:
Y aquí, mi código javascript:
Mi código html:
[Editar] Código refactorizado a continuación:
Y llame al nuevo método de la siguiente manera:
¡Eso es!
fuente
He puesto una matriz en el controlador.
En el marcado he puesto algo como seguir
La salida fue la siguiente, en el controlador solo necesitaba verificar si es verdadero o falso; verdadero para marcado, ausente / falso para no marcado.
Espero que esto ayude.
fuente
Creo que la siguiente forma es más clara y útil para ng-repeticiones anidadas. Compruébalo en Plunker .
Cita de este hilo :
fuente
Aquí está el enlace jsFillde para el mismo, http://jsfiddle.net/techno2mahi/Lfw96ja6/ .
Utiliza la directiva que está disponible para descargar en http://vitalets.github.io/checklist-model/ .
Es bueno tener directivas ya que su aplicación necesitará esta funcionalidad con mucha frecuencia.
El código está abajo:
HTML:
JavaScript
fuente
<div>
que de cierre,</div>
. ¿Has dejado algo afuera?Prueba mi bebe:
** **
** **
Luego, para cualquier modelo ng con casillas de verificación, devolverá una cadena de todas las entradas que seleccionó:
fuente