2016-02-09 17 views
5

In angolare 2 come vorrei aggiungere migliaia di separazione per i controlli di input il numero, così per esempioAggiungi Comma Separated Migliaia al numero di ingressi in Angular2

valore nel modello 1000

Quando il cursore non è in separatore di display di controllo di input (ad esempio 1.000)

Quando si modifica valore (cioè cursore all'interno controllo) nel controllo di input, si dovrebbe rimuovere virgole per consentire il valore di essere facilmente modificati

Grazie

+2

Creare una pipe: https://angular.io/docs/ts/latest/guide/pipes.html –

risposta

5

Come Mark ha commentato sopra, si desidera utilizzare una pipe. È possibile creare un tubo usando la seguente sintassi, quindi aggiungere semplicemente il tubo al componente usando la proprietà pipes sul decoratore del componente.

@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 questo caso mi sento di raccomandare ad ascoltare gli eventi di attivazione e di sfocatura sull'ingresso

@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

Spiacente, ho aggiornato la domanda per renderla un po 'più chiara per il comportamento richiesto che sto cercando . Grazie –

+0

Risposta aggiornata, anche se sento ancora che il tuo caso d'uso reale non è chiaro, forse potresti combinare i due esattamente per quello che stai cercando oppure pubblicare una descrizione completa e dettagliata di esattamente ciò che stai cercando dall'inizio alla fine . – SnareChops

+0

Grazie all'aggiornamento è esattamente quello che sto cercando, ho solo bisogno di renderlo un componente resalable da utilizzare per tutti gli input numerici. Grazie. –

-1

Penso che questa sia una soluzione più pulita:

Importa LOCALE_ID in app.modules.ts

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

e definire in fornitori in questo modo:

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

Questo controllo automatico volontà il separatore

+1

sembra bello, non funziona. – Blauhirn

+0

Funziona perfettamente per me. – kabus

+0

ok, quindi potrebbe essere specifico per la locale? Ho provato sia EN che DE, entrambi non avrebbero aggiunto alcun delimitatore all'ingresso del numero. '1000' rimane' 1000' e non diventa '1,000'. (anche discusso [qui] (https://github.com/angular/angular.js/issues/10146)) - edit che è angularJS, ma probabilmente lo stesso per angular. – Blauhirn

-1

numero: 0 già facendo che si può utilizzare '1.2-2' al posto di 0. Questo aggiunge una virgola come da cultura.

+1

Aggiungi altri dettagli alla tua risposta. – Billa

Problemi correlati