2016-04-08 8 views
0

Ich verwende Angular2 und ich erstellt eine Richtlinie Masken auf Eingaben zu setzen, wie folgt:Richtlinie auf Last Informationen

import {Directive, Attribute} from 'angular2/core'; 
import {NgModel} from 'angular2/common'; 

@Directive({ 
    selector: '[real]', 
    host: { 
     '(blur)': 'onInputChange()'   
    } 
}) 

export class RealDirective { 
    modelValue: string; 
    viewValue: string; 

constructor(public model: NgModel) { 
} 

onInputChange() { 
    this.modelValue = this.model.value.replace(/[^0-9\,]/g,''); 
    this.viewValue = RealDirective.format(this.modelValue); 
    this.model.viewToModelUpdate(this.modelValue); 
    this.model.valueAccessor.writeValue(this.viewValue) 
} 

static format(valor) { 

    if (valor == "") { 
     valor = "0"; 
    } 

    var valorFloat: number = parseFloat(valor.replace(",", ".")); 
    var valorString: string = valorFloat.toFixed(2).toString().replace(".", ","); 

    var valorSemCasasDecimais = valorString.substring(0, valorString.length - 3); 
    var valorArray: string[] = valorSemCasasDecimais.split(""); 

    var casa: number = 0; 

    var valorStringComPontosInvertida: string = ""; 

    for (var i = valorArray.length - 1; i > -1; i--) { 
     valorStringComPontosInvertida = valorStringComPontosInvertida + valorArray[i]; 
     casa = casa + 1; 
     if (casa == 3 && i > 0) { 
      valorStringComPontosInvertida = valorStringComPontosInvertida + "."; 
      casa = 0; 
     } 
    } 

    var valorStringComPontosInvertidaArray: string[] = valorStringComPontosInvertida.split(""); 
    var valorStringComPontosCorreta: string = ""; 

    for (var i = valorStringComPontosInvertidaArray.length - 1; i > -1; i--) { 
     valorStringComPontosCorreta = valorStringComPontosCorreta + valorStringComPontosInvertidaArray[i]; 
    } 

    var valorStringPronta: string = valorStringComPontosCorreta + valorString.substring(valorString.length - 3, valorString.length); 

    return valorStringPronta; 
} 
} 

Es wird mit der Unschärfe-Ereignis. Aber ich möchte, dass beim Laden der Informationen auf dem Formular für jeden Eingang ausführen, hat jemand eine Idee, wie dies zu tun?

Antwort

1

Sie können die ngOnInit-Methode verwenden, um auf das Laden der Anweisung zu warten. https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html

Zum Beispiel:

@Directive({ 
    selector: '[real]', 
    host: { 
     '(blur)': 'onInputChange()'   
    } 
}) 

export class RealDirective { 
    modelValue: string; 
    viewValue: string; 

    constructor(public model: NgModel) { 
    } 
    ngOnInit():void { 
    console.log(this.model); 
    } 
} 

wenn this.model ist null Sie ngOnChanges statt ngOnInit mit berücksichtigen kann zu überprüfen, wenn der Wert ändert.

Auch können Sie posten, wie die Richtlinie in Ihrem Code

+0

aufgerufen wird Vielen Dank Michael, aber ich verstehe nicht sehr gut. Ich verwende in ngOnInit der Richtlinie? Wie bekomme ich den Wert der Eingabe, weil ich einige Tests mache und es viele Male ausgeführt wird und this.model auf NgOnInit null war. –