Qual é a diferença entre required
e ng-required
(validação de formulário)?
Qual é a diferença entre required
e ng-required
(validação de formulário)?
Respostas:
Os elementos do formulário AngularJS procuram o required
atributo para executar funções de validação. ng-required
permite que você defina o required
atributo dependendo de um teste booleano (por exemplo, exija apenas o campo B - digamos, um número de aluno - se o campo A tiver um determinado valor - se você tiver selecionado "aluno" como opção )
Como exemplo, <input required>
e <input ng-required="true">
são essencialmente a mesma coisa
Se você está se perguntando por que é dessa maneira (e não apenas make <input required="true">
ou <input required="false">
), é devido às limitações do HTML - o required
atributo não tem valor associado - sua mera presença significa (conforme os padrões HTML) que o elemento é necessário - portanto, o angular precisa de uma maneira de definir / desabilitar o valor necessário ( required="false"
seria HTML inválido)
<form method="post" action="/foo" novalidate>
. Novamente, este é um atributo html5, não relacionado ao angularJS.
ng-required
aponta para uma variável de escopo / controlador, Angular a monitora quanto a alterações e define o atributo necessário de acordo. Enquanto no caso do required
atributo HTML simples, você não tem esse tipo de flexibilidade. Não? E enquanto estamos no mesmo tópico, o que dizer ng-attr-required
? É exatamente o mesmo que ng-required
?
Gostaria de fazer um complemento para a resposta de tiago :
Suponha que você esteja ocultando um elemento usando ng-show
e adicionando um required
atributo ao mesmo:
<div ng-show="false">
<input required name="something" ng-model="name"/>
</div>
irá lançar um erro algo como:
Um controle de formulário inválido com nome = '' não pode ser focalizado
Isso ocorre porque você simplesmente não pode impor required
validação aos hidden
elementos. O uso ng-required
facilita a aplicação condicional da validação necessária, o que é incrível!
ng-if
vez de ng-show
/ ng-hide
para contornar esse possível problema.
O atributo HTML required="required"
é uma declaração informando ao navegador que esse campo é necessário para que o formulário seja válido. ( required="required"
é o formulário XHTML, apenas usar required
é equivalente)
O atributo Angular ng-required="yourCondition"
significa 'isRequired (yourCondition)' e define o atributo HTML dinamicamente para você, dependendo da sua condição.
Observe também que a versão HTML é confuso , é não possível escrever algo condicional como required="true"
ou required="false"
, apenas a presença dos assuntos de atributos (meios presentes verdade)! É aqui que o Angular ajuda você ng-required
.