amarkes / br-mask

MIT License
116 stars 56 forks source link

0.01 centavo não funciona #20

Open ademir10 opened 5 years ago

ademir10 commented 5 years ago

Boa tarde! estou tentando pegar o valor exato digitado no ion-input e não sei porque o valor que chega não é igual. Notei que se, eu digitar 1 centavo 1: no input eu enxergo 1 ao invés de 0.01 Esse é o o valor que chega na minha action 1

Ou se eu digitar 001: esse é o valor que chega na minha action: .001

Esse é o meu ambiente: Ionic: Ionic CLI : 5.0.1 (/usr/local/lib/node_modules/ionic) Ionic Framework : @ionic/angular 4.4.2 @angular-devkit/build-angular : 0.13.9 @angular-devkit/schematics : 7.3.9 @angular/cli : 7.3.9 @ionic/angular-toolkit : 1.5.1

Cordova: Cordova CLI : 9.0.0 (cordova-lib@9.0.1) Cordova Platforms : android 7.1.4, ios 4.5.5 Cordova Plugins : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.0.1, (and 15 other plugins) Utility: cordova-res : not installed native-run : 0.2.2 System: Android SDK Tools : 26.1.1 (/Users/dede/Library/Android/sdk) ios-deploy : 1.9.4 NodeJS : v10.15.3 (/usr/local/bin/node) npm : 6.4.1 OS : macOS Mojave Xcode : Xcode 10.2.1 Build version 10E1001

Modulo, view e action respectivamente:

import { BrMaskerModule } from 'br-mask'; @NgModule({ imports: [ CommonModule, FormsModule, IonicModule, BrMaskerModule, ReactiveFormsModule, RouterModule.forChild(routes) ],

ACTION: amount: string; valor_div:any; amountChange(data) { this.valor_div = $('#input input').val(); console.log('Esse é o valor_div ' + parseFloat(this.valor_div)); console.log('Esse é o amount ' + this.amount); if(parseFloat(this.valor_div) > parseFloat(this.total_a_receber)){ this.buttonDisabled = true; this.simple_alert({header: 'Atenção!', subheader: 'Não é permitido efetuar baixas com o valor informado maior que o total restante R$ ' + parseFloat(this.total_a_receber).toFixed(2) + ' a receber!'}); } else { this.buttonDisabled = false; } }

VIEW:

Qualquer ajuda é bem vinda, estou a horas tentando resolver este problema e não consigo. Obrigado!

monica-santos commented 4 years ago

@ademir10 conseguiu achar alguma solução?

ademir10 commented 4 years ago

@ademir10 conseguiu achar alguma solução?

consegui fazer funcionar, mais notei que, se você digitar apenas 1 após dar o foco no input, ele vai entender no primeiro momento que você digitou somente 1, agora se você digitar 001, ai sim ele entende que você quer dizer 0,01.

Portanto é somente depois do segundo digito que a mascara entra em ação, mais está funcionando corretamente sim.

Exemplo caso você não tenha feito nada ainda: arquivo.page.ts

import {FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms'

export class { DECIMAL_SEPARATOR="."; GROUP_SEPARATOR=","; }

constructor ( private formBuilder: FormBuilder, )

//Chama essa action quando você digita alguma coisa no input substituindo virgula por ponto caso precise
amountChange(data:any) {
  var valor_digitado = this.emprestimoData.valorEmprestimo.toString().replace(/\,/g,'.');

}

Na view:

Valor R$

Hope it help you, God bless!

asamarcos commented 4 years ago

Dei uma olhada no repositório e esse comportamento é proposital no tipo de mascara money. Para fazer com que a máscara funcione no primeiro dígito, é só informar como 'false' o parâmetro moneyInitHasInt, como indicado abaixo:

<ion-input [brmasker]="{money:true, moneyInitHasInt: false}"></ion-input>

ademir10 commented 4 years ago

Dei uma olhada no repositório e esse comportamento é proposital no tipo de mascara money. Para fazer com que a máscara funcione no primeiro dígito, é só informar como 'false' o parâmetro moneyInitHasInt, como indicado abaixo:

<ion-input [brmasker]="{money:true, moneyInitHasInt: false}"></ion-input>

valeu pelo feedback Marcos! vou experimentar, brigadão man!

rdanielst commented 3 years ago

vocês conseguem digitar 0, no meu caso para entrar com um valor terminado em 0 não funciona rs Por exemplo R$ 3,50: não é possível digitar o zero