2016-07-16 36 views
1

我正在使用angular2,新窗體api。如何在angular2中動態地格式化輸入元素?

我想要一個電話號碼輸入框,它隨用戶鍵入自動格式化。

例如,用戶類型:

12345678901 

,並在他們進入它改變

1 (234) 567-8901 

我想通了如何將指令添加到輸入控制,但我不可識別電話號碼不知道如何將自己注入輸入處理流水線。

回答

9

你必須創建自己的指令,以此作爲一個例子,它把使用Phone.format,存儲模型的原始號碼,但顯示格式的數字用戶:

import { Directive } from '@angular/core' 
import { NgControl } from '@angular/forms' 
import { Phone } from '../phone' 

@Directive({ 
    selector: '[ngModel][phone]', 
    host: { 
    '(ngModelChange)': 'onInputChange($event)', 
    '(blur)': 'onBlur($event)' 
    } 
}) 
export class PhoneDirective { 

    constructor (control: NgControl) { 
    this.control = control 
    } 

    ngOnInit() { 
    let formatted = Phone.format(this.control.model) 
    setTimeout(() => this.control.valueAccessor.writeValue(formatted), 0) 
    } 

    onBlur() { 
    let val = this.control.model 
    let raw = val.replace(/\W/g, '') 
    let formatted = Phone.format(raw) 

    this.control.valueAccessor.writeValue(formatted) 
    this.control.viewToModelUpdate(raw) 
    } 

    onInputChange (val) { 
    let raw = val.replace(/\W/g, '') 
    if (val !== raw) this.control.viewToModelUpdate(raw) 
    } 
} 
+0

似乎你正在使用angular2測試版代碼,PS:'angular2/core'已經被'@ angular/core'等改變了。 –

+0

btw我不認爲這個問題是根據每個問題的答案。 –

+0

我用最新的表格代碼更新了它。它非常接近,需要'NgControl'而不是'(ngModelChange)'事件。它也有無限循環的重入更新。 –