2016-02-09 4 views
5

In Angular 2 getrennt, wie würde ich Tausender-Trennzeichen für Zahleneingabe Steuerelemente hinzufügen, so zum Beispielhinzufügen Comma Tausende zu Anzahl Eingängen in Angular2

Wert in Modell 1000

Wenn Cursor nicht in Eingangssteueranzeige Separator (zB 1000)

Beim Bearbeiten Wert (dh Cursor innerhalb Steuerung) in Eingangssteuer, sollte es Kommata entfernen der Wert zu erlauben, leicht

Dank bearbeitet werden

+2

Erstellen Sie eine Pipe: https://angular.io/docs/ts/latest/guide/pipes.html –

Antwort

5

Wie oben erwähnt, möchten Sie eine Pipe verwenden. Sie können eine Pipe mit der folgenden Syntax erstellen und dann einfach die Pipe zu Ihrer Komponente hinzufügen, indem Sie die pipes -Eigenschaft auf dem Komponenten-Decorator verwenden.

@Pipe({name: 'commaSeparatedNumber'}) 
export class CommaSeparatedNumberPipe implements PipeTransform { 
    transform(value:number, args:string[]) : any { 
    return // Convert number to comma separated number string 
    } 
} 

@Component({ 
    ... 
    template: ` 
    <div *ngIf="!editing">{{number | commaSeparatedNumber}}</div> 
    <input type="number" [(ngModel)]="number" /> 
    `, 
    pipes: [CommaSeparatedNumberPipe] 
}) 
class MyComponent{ 
    public editing: boolean; 
    public number: number; 
    ... 
} 

UPDATE

In diesem Fall würde ich auf dem Eingang zu dem Fokus und Unschärfe Ereignisse hören empfehlen

@Component({ 
    ... 
    template: `<input type="text" [(ngModel)]="number" 
       (focus)="removeCommas()" (blur)="addCommas()" />` 
}) 
class MyComponent{ 
    number: string; 

    removeCommas(){ 
    this.number = this.number.replace(',', ''); 
    } 

    addCommas(){ 
    this.number = // Convert number to comma separated number string 
    } 
} 
+1

Entschuldigung, ich habe die Frage aktualisiert, um das gewünschte Verhalten, das ich suche, ein wenig klarer zu machen . Danke –

+0

Aktualisierte Antwort, obwohl ich immer noch das Gefühl habe, dass dein tatsächlicher Anwendungsfall unklar ist, vielleicht könntest du die beiden kombinieren, um genau das zu bekommen, was du suchst oder bitte eine vollständige und detaillierte Beschreibung von genau dem, was du suchst, von Anfang bis Ende veröffentlichst . – SnareChops

+0

Dank der Aktualisierung ist genau das, was ich suche, ich muss nur eine resales Komponente für alle numerischen Eingaben verwenden. Vielen Dank. –

-1

Ich denke, dass dies eine sauberere Lösung ist:

Importieren Sie LOCALE_ID in app.modules.ts

import {ErrorHandler, NgModule, LOCALE_ID} from '@angular/core'; 

und Anbietern wie folgt definieren:

providers: [ 
    PouchServiceProvider, 
    DbProvider, { 
     provide: LOCALE_ID, 
     useValue: "nl-NL" 
    } 
    ] 

Dies wird Selbststeuerung der seperator

+1

sieht gut aus, funktioniert nicht. – Blauhirn

+0

Es funktioniert perfekt für mich. – kabus

+0

ok, also könnte das locale-spezifisch sein? Ich probierte sowohl EN als auch DE und beide würden keine Begrenzer zum Zahleneingang hinzufügen. '1000' bleibt' 1000' und wird nicht '1000'. (auch diskutiert [hier] (https://github.com/angular/angular.js/issues/10146)) - bearbeiten, das ist angularJS, aber wahrscheinlich das gleiche für angular. – Blauhirn

-1

Nummer: 0 bereits tun, dass Sie 1.2-2 'verwenden, können anstelle von 0. Dies fügt Komma nach Kultur.

+1

Fügen Sie weitere Details zu Ihrer Antwort hinzu. – Billa

Verwandte Themen