Quiero usar el botón de radio en un formulario usando Angular 2
Options : <br/>
1 : <input name="options" ng-control="options" type="radio" value="1" [(ng-model)]="model.options" ><br/>
2 : <input name="options" ng-control="options" type="radio" value="2" [(ng-model)]="model.options" ><br/>
El valor inicial de model.options es 1
cuando se carga la página, el primer botón de opción no está marcado y las modificaciones no están vinculadas al modelo
Alguna idea ?
forms
radio-button
angular
Mourad Zouabi
fuente
fuente
Respuestas:
use [valor] = "1" en lugar de valor = "1"
Editar:
Como sugiere thllbrg "Para uso angular 2.1+ en
[(ngModel)]
lugar de[(ng-model)]
"fuente
[(ngModel)]
lugar de[(ng-model)]
. Leer de nuevo .value="1" [(ngModel)]="model.options"
. Incluir losvalue
corchetes entre corchetes no funcionabaNota: el enlace del botón de opción ahora es una función compatible en RC4 en adelante; consulte esta respuesta
Ejemplo de botón de opción usando RadioControlValueAccessor personalizado similar a CheckboxControlValueAccessor ( actualizado con Angular 2 rc-1 )
App.ts
template.html
radio_value_accessor.ts
Fuente: https://github.com/angular2-school/angular2-radio-button
Demostración en vivo de Plunker: http://plnkr.co/edit/aggee6An1iHfwsqGoE3q?p=preview
fuente
this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', value == this._elementRef.nativeElement.value);
Mi solución manual, que implica la actualización manual
model.options
cuando se selecciona un nuevo botón de opción:Esto Plunkerdemuestra lo anterior, así como cómo usar un botón para cambiar el botón de opción seleccionado, es decir, para demostrar que el enlace de datos es bidireccional:
fuente
get debug()
función, ¿quéget
significa? la segunda es: ¿hay alguna respuesta alternativa como esta para las casillas de verificación? proporcione también algún código para las casillas de verificación. gracias +1 por una gran respuesta.get
es una función de acceso de TypeScript . Publique una pregunta para las casillas de verificación.Anotherdate('2015-05-18T02:30:56')
lo que no funcionará. Se llama a los setters cuando intenta asignar un valor a una propiedad. En mi plunker creé unasetDate()
función para \ hat acepta un nuevo valor de fecha, que luego se asigna aAnotherdate
. Esa asignación llamará automáticamente al colocador.{{}}
enlaces se vuelven a evaluar en cada ciclo de detección de cambios. ImplementéngDoCheck()
en AppComponent en el plunker para contar los ciclos de detección de cambios. De ahí vemos que la detección de cambios se llama 3 veces. En el modo de desarrollo, los enlaces se comprueban dos veces , por lo tanto, seis veces.Esta es la mejor manera de usar botones de opción en Angular2. No hay necesidad de usar el evento (click) o un RadioControlValueAccessor para cambiar el valor de la propiedad enlazada, establecer la propiedad [comprobada] hace el truco.
Publiqué un ejemplo del uso de botones de opción : Angular 2: ¿cómo crear botones de opción a partir de enum y agregar enlaces bidireccionales? Funciona desde al menos Angular 2 RC5.
fuente
Este problema se resuelve en la versión Angular 2.0.0-rc.4, respectivamente en formularios.
Incluir
"@angular/forms": "0.2.0"
en package.json.Luego extiende tu bootstrap en main. Parte relevante:
Tengo esto en .html y funciona perfectamente: valor: {{buildTool}}
fuente
disableDeprecatedForms
yprovideForms
parece mágica y no tiene ningún sentido. ¿Qué hacen estas cosas? Este es un código ilegible redundante que hace cosas impredecibles de escala desconocida.Estaba buscando el método correcto para manejar esos botones de radio. Aquí hay un ejemplo de una solución que encontré aquí:
Observe el onSelectionChange que pasa el elemento actual al método.
fuente
La entrada de radio no parece ser compatible todavía. Debe haber un descriptor de acceso de radio valor de entrada (similar a la casilla uno , donde se pone 'comprobado' attr aquí ), pero no he encontrado ninguna. Así que implementé uno; puedes comprobarlo aquí .
fuente
[value] = "item" using * ngFor también funciona con Reactive Forms en Angular 2 y 4
fuente
Lo siguiente solucionó mi problema, considere agregar entrada de radio dentro de la
form
etiqueta y use la[value]
etiqueta para mostrar el valor.fuente
Aquí hay una solución que funciona para mí. Implica la vinculación del botón de opción, pero no a los datos comerciales, sino que se vincula al estado del botón de opción. Probablemente NO sea la mejor solución para nuevos proyectos, pero es apropiada para mi proyecto. Mi proyecto tiene una tonelada de código existente escrito en una tecnología diferente que estoy portando a Angular. El código antiguo sigue un patrón en el que el código está muy interesado en examinar cada botón de radio para ver si es el seleccionado. La solución es una variación de las soluciones del controlador de clic, algunas de las cuales ya se han mencionado en Stack Overflow. El valor agregado de esta solución puede ser:
Esta solución implica
Ejemplo:
...
...
Cuando el usuario hace clic en un botón de opción, se invoca el método selectButton de la clase auxiliar. Se pasa el modelo del botón de radio en el que se hizo clic. La clase auxiliar establece el campo booleano "seleccionado" del modelo pasado en verdadero y establece el campo "seleccionado" de todos los demás modelos de botones de opción en falso.
Durante la inicialización, el componente debe construir una instancia de la clase auxiliar con una lista de todos los modelos de botones de radio del grupo. En el ejemplo, "radioButtonGroupList" sería una instancia de la clase auxiliar cuyo código es:
fuente
Ejemplo de listado de radio de Angular 8:
Enlace de origen
Respuesta JSON
Plantilla HTML
fuente
Solución y solución alternativa más simples:
fuente
Creé una versión usando solo un evento de clic en los elementos cargados y pasando el valor de la selección a la función "getSelection" y actualizando el modelo.
En tu plantilla:
Tu clase:
Ver ejemplo: https://plnkr.co/edit/2Muje8yvWZVL9OXqG0pW?p=info
fuente
Por mucho que esta respuesta no sea la mejor dependiendo de su caso de uso, funciona. En lugar de usar el botón de opción para una selección Masculina y Femenina, use los
<select> </select>
trabajos a la perfección, tanto para guardar como para editar.Lo anterior debería funcionar bien, para editar usando FormGroup con
patchValue
. Para crear, puede usar en[(ngModel)]
lugar deformControlName
. Todavía funciona.El trabajo de plomería involucrado con el botón de radio, elegí ir con la selección en su lugar. Desde el punto de vista visual y de UX, no parece ser el mejor, pero desde el punto de vista de un desarrollador, es mucho más fácil.
fuente
En el cambio de botón de radio, obtenga el valor de los botones respectivos con estas líneas
https://stackblitz.com/edit/angular-jpo2dm?embed=1&file=src/app/app.component.html
fuente
Aquí hay un código que uso que funciona con Angular 7
(Nota: En el pasado, a veces usé información proporcionada por la respuesta de Anthony Brenelière, lo cual aprecio. Pero, al menos para Angular 7, esta parte:
Me pareció innecesario.)
Mi solución aquí tiene tres ventajas:
HTML de ejemplo:
TypeScript de ejemplo:
Se utilizan dos clases:
Clase de grupo de botones de radio:
Clase de botón de radio
fuente
Esta puede no ser la solución correcta, pero esta también es una opción, espero que ayude a alguien.
Hasta ahora había obtenido el valor de radioButtons usando el método (clic) como el siguiente:
y en el archivo .ts he establecido el valor de la variable predefinida para obtener el valor de
onChange
función.Pero después de buscar, encontré un buen método que aún no he probado, pero parece que este es bueno usando el
[(ng-model)]
enlace aquí para github aquí . esto se usaRadioControlValueAccessor
para la radio y también para la casilla de verificación. aquí está el # plnkr # de trabajo para este método aquí .fuente