Так что я получил директиву форматирования значения аксессора:Пользовательское Значение Accessor в Angular2
const CUSTOM_VALUE_ACCESSOR = new Provider(
NG_VALUE_ACCESSOR, { useExisting: forwardRef(() => NumbersValueAccessor), multi: true });
@Directive({
selector: 'input[format]',
host: { '(input)': 'onMyChange($event.target.value)' },
providers: [CUSTOM_VALUE_ACCESSOR]
})
export class NumbersValueAccessor extends DefaultValueAccessor {
//...
}
Тогда я использую его как
@Component({
templateUrl: 'frequencyPage.html'
, moduleId: module.id
, directives: [/*...*/ NumbersValueAccessor]
})
export class FrequencyPage //...
и в HTML, как
<input format="{number:true}" [(ngModel)]="test.alpha"/>
Это получает экземпляр все правильно, но глядя на угловой код скомпилированного шаблона JIT:
self._DefaultValueAccessor_32_3 = new jit_DefaultValueAccessor3(self.renderer,new jit_ElementRef18(self._el_32));
self._Token_NgValueAccessor_32_4 = [
self._DefaultValueAccessor_32_3,
self._DefaultValueAccessor_32_3
]
;
self._NgModel_32_5 = new jit_NgModel5(null,null,null,self._Token_NgValueAccessor_32_4);
self._NgControl_32_6 = self._NgModel_32_5;
self._NgControlStatus_32_7 = new jit_NgControlStatus7(self._NgControl_32_6);
self._NumbersValueAccessor_32_8 = new jit_NumbersValueAccessor8(self.renderer,new jit_ElementRef18(self._el_32));
он создан ПОСЛЕ ngModel, поэтому не передается ему, поэтому, когда я фактически редактирую вход, это имя доступа по умолчанию, которое вызывается. Что мне не хватает?
EDIT: Одна вещь, которую я нашел: если вместо расширения DefaultValueAccessor я переописать ControlValueAccessor с нуля, это работает. Является ли это ошибкой в компиляторе шаблонов angular2?
Ну, с простым обходным путем и существующих проблемами на GitHub, моя работа здесь закончена :) – TDaver