Quero usar o botão de opção em um formulário 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/>
O valor inicial de model.options é 1
quando a página é carregada, o primeiro botão de opção não é verificado e as modificações não são vinculadas ao modelo
Qualquer ideia ?
forms
radio-button
angular
Mourad Zouabi
fonte
fonte
Respostas:
use [value] = "1" em vez de value = "1"
Editar:
Como sugerido por thllbrg "Para angular 2.1+ use em
[(ngModel)]
vez de[(ng-model)]
"fonte
[(ngModel)]
vez de[(ng-model)]
. Leia novamente .value="1" [(ngModel)]="model.options"
. Encerrando ovalue
em colchetes não foi trabalhoNota - a ligação de botões de opção agora é um recurso suportado no RC4 em diante - veja esta resposta
Exemplo de botão de opção usando RadioControlValueAccessor personalizado semelhante a CheckboxControlValueAccessor ( atualizado com Angular 2 rc-1 )
App.ts
template.html
radio_value_accessor.ts
Fonte: https://github.com/angular2-school/angular2-radio-button
Demonstração ao vivo do Plunker: http://plnkr.co/edit/aggee6An1iHfwsqGoE3q?p=preview
fonte
this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', value == this._elementRef.nativeElement.value);
Minha solução alternativa manual, que envolve a atualização manual
model.options
quando um novo botão de opção é selecionado:Isso Plunkerdemonstra o exposto acima, e também como usar um botão para alterar o botão de opção selecionado - ou seja, para provar que a ligação de dados é bidirecional:
fonte
get debug()
função, o queget
significa? a segunda é: existe alguma alternativa como essa para as caixas de seleção? forneça também um código para as caixas de seleção. obrigado +1 pela ótima resposta.get
é um recurso acessador do TypeScript . Poste uma pergunta para as caixas de seleção.Anotherdate('2015-05-18T02:30:56')
não funcionará. Os setters são chamados quando você tenta atribuir um valor a uma propriedade. No meu plunker, criei umasetDate()
função para \ hat aceita um novo valor de data, que depois atribui aAnotherdate
. Essa atribuição chama automaticamente o setter.{{}}
ligações são reavaliadas a cada ciclo de detecção de alterações. Eu implementeingDoCheck()
no AppComponent no plunker para contar os ciclos de detecção de alterações. A partir disso, vemos que a detecção de alterações é chamada 3 vezes. No modo dev, as ligações são verificadas duas vezes , daí as 6 vezes.Aqui está a melhor maneira de usar os botões de opção no Angular2. Não há necessidade de usar o evento (clique) ou um RadioControlValueAccessor para alterar o valor da propriedade vinculada, definindo a propriedade [marcada] faz o truque.
Publiquei um exemplo do uso de botões de opção: Angular 2: como criar botões de opção a partir de enum e adicionar ligação bidirecional? Funciona a partir de pelo menos Angular 2 RC5.
fonte
Este problema foi resolvido na versão Angular 2.0.0-rc.4, respectivamente em formulários.
Inclua
"@angular/forms": "0.2.0"
no package.json.Em seguida, estenda seu bootstrap em main. Parte relevante:
Eu tenho isso em .html e funciona perfeitamente: value: {{buildTool}}
fonte
disableDeprecatedForms
eprovideForms
parece mágica e não faz nenhum sentido. O que essas coisas fazem? Isso é código ilegível redundante, tornando coisas imprevisíveis em escala desconhecida.Eu estava procurando o método certo para lidar com esses botões de opção. Aqui está um exemplo de uma solução que encontrei aqui:
Observe o onSelectionChange que passa o elemento atual para o método
fonte
A entrada de rádio ainda não parece ser suportada. Deve haver um valor de entrada de rádio acessor (semelhante ao da caixa um , onde ele define 'checada' attr aqui ), mas não havia nenhuma. Então eu implementei um; você pode conferir aqui .
fonte
[value] = "item" usando * ngFor também funciona com formas reativas nos angulares 2 e 4
fonte
O seguinte problema foi corrigido, considere adicionar entrada de rádio dentro da
form
tag e use-a[value]
para exibir o valor.fonte
Aqui está uma solução que funciona para mim. Envolve a ligação do botão de opção - mas não a ligação aos dados corporativos, mas a ligação ao estado do botão de opção. Provavelmente NÃO é a melhor solução para novos projetos, mas é apropriada para o meu projeto. Meu projeto tem uma tonelada de código existente escrito em uma tecnologia diferente que estou portando para o Angular. O código antigo segue um padrão no qual o código está muito interessado em examinar cada botão de opção para ver se é o selecionado. A solução é uma variação das soluções do manipulador de cliques, algumas das quais já foram mencionadas no Stack Overflow. O valor agregado desta solução pode ser:
Esta solução envolve
Exemplo:
...
...
Quando o usuário clica em um botão de opção, o método selectButton da classe auxiliar é chamado. É passado o modelo para o botão de opção que foi clicado. A classe auxiliar define o campo booleano "selecionado" do modelo passado em como true e define o campo "selecionado" de todos os outros modelos de botão de opção como false.
Durante a inicialização, o componente deve construir uma instância da classe auxiliar com uma lista de todos os modelos de botão de opção no grupo. No exemplo, "radioButtonGroupList" seria uma instância da classe auxiliar cujo código é:
fonte
Exemplo de listagem de rádio angular 8:
Link de origem
Resposta JSON
Modelo HTML
fonte
Solução e solução mais simples:
fonte
Eu criei uma versão usando apenas um evento click nos elementos carregados e passando o valor da seleção para a função "getSelection" e atualizando o modelo.
No seu modelo:
Sua classe:
Veja o exemplo: https://plnkr.co/edit/2Muje8yvWZVL9OXqG0pW?p=info
fonte
Por mais que essa resposta possa não ser a melhor, dependendo do seu caso de uso, ela funciona. Em vez de usar o botão de opção para uma seleção masculina e feminina, use as
<select> </select>
obras perfeitamente, tanto para salvar quanto para editar.O exemplo acima deve funcionar perfeitamente, para editar usando o FormGroup with
patchValue
. Para criar, você pode usar em[(ngModel)]
vez doformControlName
. Ainda funciona.No trabalho de encanamento envolvido com o botão de opção, optei por escolher o select. Visualmente e em termos de UX, não parece ser o melhor, mas do ponto de vista de um desenvolvedor, é muito mais fácil.
fonte
Na mudança de botão de opção, obtenha o valor dos respectivos botões com estas linhas
https://stackblitz.com/edit/angular-jpo2dm?embed=1&file=src/app/app.component.html
fonte
Aqui está um código que eu uso que funciona com o Angular 7
(Nota: No passado, às vezes eu usava informações fornecidas pela resposta de Anthony Brenelière, que eu aprecio. Mas, pelo menos para o Angular 7, esta parte:
Eu achei desnecessário.)
Minha solução aqui tem três vantagens:
Exemplo de HTML:
Exemplo TypeScript:
Duas classes são usadas:
Classe do grupo de botões de opção:
Classe do botão de opção
fonte
Esta pode não ser a solução correta, mas esta também é uma opção, espero que ajude alguém.
Até agora eu estava obtendo o valor de radioButtons usando o método (clique) como a seguir:
e no arquivo .ts eu configurei o valor da variável predefinida para obter o valor da
onChange
função.Mas depois de pesquisar, encontrei um bom método que ainda não tentei, mas parece que este é bom usando o
[(ng-model)]
link aqui para o github aqui . isso está sendo usadoRadioControlValueAccessor
para o rádio e também para a caixa de seleção. aqui está o # plnkr # de trabalho para esse método aqui .fonte