2017-06-07 5 views
1

Ich habe eine Zwei-Wege-Datenbindung mit einer benutzerdefinierten Pipe.Pipe, ngModel und ngModelChange

Mein Eingabetextfeld Code:

<input type="text" [ngModel]="post.price | myCurrencyPipe" (ngModelChange)="post.price = $event" name="price" id ="price" (change)="itemPriceUpdate(post)"/> 

und benutzerdefinierter Rohrcode:

@Pipe({ name: 'myCurrencyPipe'}) 
export class MyCurrencyPipe implements PipeTransform{ 

     transform(val:any) { 
     var value = parseInt(data); 
     var num = '$' + value.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); 
     return num; 

     } 

Wenn ich auf mein Eingabefeld Wert bearbeiten zeigt NaN auf Tastendruck.

Antwort

0

Dies ist, weil Sie Zeichen $ an der Vorderseite von val haben, die von Ihrer benutzerdefinierten Rohr hinzugefügt. Entfernen Sie es vor dem Aufruf parseInt(data) wird Ihr Problem lösen.

transform(val:any) { 
    val = val.toString().replace(/[^0-9.]/g, ''); 
    if (val === '') return ''; 
    var value = parseInt(val); 
    var num = '$' + value.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); 
    return num; 
} 

plinker demo.

+0

Danke für Ihre Hilfe. Ich habe es nach deinen Anweisungen versucht. Es gab immer noch NAN-Problem im Eingabefeld. Jetzt habe ich zusätzliche Bedingung in benutzerdefinierten Rohr hinzugefügt und es jetzt Anzeige von Nan in Eingabefeld. if (isNaN (val)) { var num1 = ''; Rückkehrnummer1; } –

+0

@SalmaKona-Parameter von 'ParseInt' muss Typ von' Nummer' sein, sonst wird es in 'NAN' konvertiert. – Pengyy

+0

Danke @Pengyy für Ihre Hilfe. –

Verwandte Themen