업데이트 : 문제는 ControlValueAccessor의 구현에 있었지만 이후 문제는 ControlValueAccessor를 하위 요소에 적용하는 것이 었습니다. 반영하도록 수정 된 질문.이온 입력을위한 통화 입력 지시문을 구현하는 방법
나는 '달러'형식 (예를 들어, 10.00)에서 통화 값을 표시 것이지만 센트로서 기본 모델 (예를 들어, 1000)에 저장 될 속성 지침을 제공하고자합니다. ControlValueAccessor 인터페이스를 사용하여이 다음이
이(function() {
'use strict';
angular.module('app.directives').directive('ndDollarsToCents', ['$parse', function($parse) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {
var listener = function() {
element.val((value/100).toFixed(2));
};
ctrl.$parsers.push(function(viewValue) {
return Math.round(parseFloat(viewValue) * 100);
});
ctrl.$render = function() {
element.val((ctrl.$viewValue/100).toFixed(2));
};
element.bind('change', listener);
}
};
}]);
})();
은 이온 2 년/2 각도 내가 구현 다음과 같이
<!-- cost = 1000 would result in text input value of 10.00
<input type="text" [(ngModel)]="cost" name="cost" currencyInput>
<!-- or in Ionic 2 -->
<ion-input type="text" [(ngModel)]="cost" name="cost-ionic" currencyInput>
이전 AngularJS와 1.x에서에 내가 지시 링크 기능에서 구문 분석을 사용하여 렌더링 것이다 :
import { Directive, Renderer, ElementRef, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
const CURRENCY_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CurrencyInputDirective),
multi: true
}
@Directive({
selector: '[currencyInput]',
host: {
'(input)': 'handleInput($event.target.value)'
},
providers: [ CURRENCY_VALUE_ACCESSOR ]
})
export class CurrencyInputDirective implements ControlValueAccessor, AfterViewInit
{
onChange = (_: any) => {};
onTouched =() => {};
inputElement: HTMLInputElement = null;
constructor(private renderer: Renderer, private elementRef: ElementRef) {}
ngAfterViewInit()
{
let element = this.elementRef.nativeElement;
if(element.tagName === 'INPUT')
{
this.inputElement = element;
}
else
{
this.inputElement = element.getElementsByTagName('input')[0];
}
}
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn:() => void): void { this.onTouched = fn; }
handleInput(value : string)
{
if (value)
{
value = String(Math.round(parseFloat(value) * 100));
}
this.onChange(value);
}
writeValue(value: any): void
{
if (value)
{
value = (parseInt(value)/100).toFixed(2);
}
this.renderer.setElementProperty(this.inputElement, 'value', value);
}
}
이온 입력에 적용 할 때 직선 입력 요소에 적용하면이 기능이 정상적으로 작동하지만 작동하지 않습니다. ControlValueAccessor를 이온 입력의 자식 입력 요소에 적용 할 수있는 방법이 있습니까?
입력 및 출력 ?? 샘플 – Aravind
내 대답을 참조하십시오. – Aravind