Ir ao conteúdo
  • Cadastre-se

Javascript Não vejo vantagem no "data binding" ANGULAR JS, está esquisito.


Ir à solução Resolvido por Adriano_web,

Posts recomendados

Estou tentando criar uma aplicação que validará e-mail e senha de um usuário, exibindo uma mensagem de erro caso algo dê errado. A ideia seria realizar a depuração do campo de entrada com expressões regulares JavaScript, utilizando uma diretiva "ng-hide" para exibir ou ocultar a mensagem de erro caso true ou false.

 

Curiosidade: não faço ideia do porque o Angular não permite que se utilize o type="email" para o campo, queria saber o porque que com isso nenhuma ligação de dados ponta a ponta funciona. Ou seja, quando utilizo o type=email o Angular não transmite os valores do campo para a variável contida na ng-model, mais não é esse o ponto. A dúvida não é essa, mas é uma curiosidade. 

<input type="email" ng-model="campoValor">

{{ campoValor }}

O exemplo acima não funciona em tempo real.

 

Mais a dúvida proeminente é: 

Eu queria que o valor que estivesse no input pudesse ser apurado em tempo real, ou seja, se o usuário digitasse o e-mail sem conter um arroba "¨@", por exemplo, a mensagem contendo o erro seria exibida, pois o campo e a expressão regular não bateriam. Mas não está acontecendo isso mesmo utilizando o type="text". Segue o código:

 

HTML

<form>
  <input type="text" name="email" ng-model="valorCampoEmail" placeholder="[email protected]" autofocus>
  <span ng-hide="condicaoEmailValido">O seu e-mail não é válido!</span>
</form>

 

ANGULAR

var app = angular.module("formValidTest", []);
app.controller("formTestCtrl", function($scope) {
  $scope.valorCampoEmail = "";
  $scope.condicaoEmailValido = 
    /^\w+@{1}(aol|bol|outlook|yahoo|gmail|hotmail)(.com|.gov)$/.test(angular.copy($scope.valorCampoEmail));
})

 

Detalhe: Já tentei sem utilizar o "angular.copy", apenas usando o $scope.valorCampoEmail, mas não dá certo.

 

Deveria ser verdadeiro caso o e-mail digitado tivesse todas as características da expressão regular, assim, escondendo a mensagem de erro, caso contrário, a exibiria.

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Solução

Pessoal, resolvi o problema em questão inserindo um método ao meu aplicativo como segue: 

 

Ao digitar no campo de entrada, envia o valor a variável "valorCampoEmail" e essa será apurada num método "emailApurar" que retornará um booleano a diretiva ng-hide para exibir a mensagem de erro ou ocultá-la. 

<input 
       type="text" 
       name="email" 
       data-ng-model="valorCampoEmail"
       placeholder="[email protected]" 
       autofocus />

<span data-ng-hide="emailApurar()">O seu e-mail não é válido!</span>

<script>
  var app = angular.module("formValidTest", []);
  app.controller("formTestCtrl", function($scope) {
    $scope.valorCampoEmail = "";
    $scope.emailApurar = function() {
      return /^\w+@{1}(aol|bol|outlook|yahoo|gmail|hotmail)(.com|.gov)$/.test(
        angular.copy($scope.valorCampoEmail)
      )
    }
  })
</script>
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!