2016-09-30 1 views
1

Я использую angular2 встроенные трубы процентов в моем HTMLAngular2 труба не работает для ввода

<input class="ibox1 rightalign" type="text" [ngModel]="_note.StudentPercent| percent:'.5-5'" ngControl="StudentPercent" pattern="^[0-9]\d*(\.\d+)?$" #StudentPercent="ngForm"> 

свои рабочие & дисплей правильные данные для ввода, но когда я изменить значение поля трубы не Работа.

Как это решить?

ответ

1

Вы поменяете фильтр на свое значение модели при вводе _note.StudentPercent. Для этого можно использовать обработчик ngModelChange.

<input class="ibox1 rightalign" type="text" 
    [ngModel]="_note.StudentPercent| percent:'.5-5'" 
    (ngModelChange)="changeToPercent(_note.StudentPercent,'.5-5')" 
    ngControl="StudentPercent" pattern="^[0-9]\d*(\.\d+)?$" 
    #StudentPercent="ngForm" /> 

Код

changeToPercent(percent, format){ 
    //make sure PercentPipe in declarations & providers of NgModule 
    this._note.StudentPercent = new PercentPipe().transform(percent, format) 
} 
+0

получает исключение: Не может иметь трубу в выражении действий. – srashtisj

+0

@srashtisj Я думаю, вы не можете использовать 'Pipes' непосредственно в действии события, в основном вам нужен метод вызова компонента и делать эту вещь внутри компонента и назначать обратно модели, например' (ngModelChange) = "_ note.StudentPercent = doApplyPipe (_note .StudentPercent) "' & where 'doApplyPipe' вернет результат –

+0

да! но если я использую этот подход, мне нужно преобразовать значение, когда оно будет сохранено. например 0.24 => 24.00000%, тогда при сохранении 24.00000% => 0.24000 ... есть ли какой-либо другой подход к использованию трубы? – srashtisj